我在本地和生产环境上使用相同的连接字符串。
当连接字符串为mongodb://localhost/mydb
时
用户名和密码是什么? 这样做安全吗?
我在本地和生产环境上使用相同的连接字符串。
当连接字符串为mongodb://localhost/mydb
时
用户名和密码是什么? 这样做安全吗?
默认情况下,MongoDB没有启用访问控制,因此没有默认的用户名或密码。
要启用访问控制,请使用命令行选项--auth
或security.authorization配置文件设置之一。
您可以使用以下过程或参考MongoDB文档中的Enabling Auth。
未启用访问控制的情况下启动MongoDB。
mongod --port 27017 --dbpath /data/db1
连接到实例。
mongosh --port 27017
创建用户管理员。
use admin
db.createUser(
{
user: "myUserAdmin",
pwd: passwordPrompt(), // or cleartext password
roles: [
{ role: "userAdminAnyDatabase", db: "admin" },
{ role: "readWriteAnyDatabase", db: "admin" }
]
}
)
重新启动启用访问控制的MongoDB实例。
mongod --auth --port 27017 --dbpath /data/db1
以用户管理员身份进行身份验证。
mongosh --port 27017 --authenticationDatabase "admin"\
-u "myUserAdmin" -p
除了@Camilo Silva已经提到的内容,如果你想免费访问创建数据库、读取、写入数据库等功能,但不想创建根角色,可以按照以下方式更改第三步骤:
use admin
db.createUser(
{
user: "myUserAdmin",
pwd: "abc123",
roles: [ { role: "userAdminAnyDatabase", db: "admin" },
{ role: "dbAdminAnyDatabase", db: "admin" },
{ role: "readWriteAnyDatabase", db: "admin" } ]
}
)
mongo --port 27017 -u "myUserAdmin" -p "abc123" \
--authenticationDatabase "admin"
添加权限:
use admin
db.grantRolesToUser(
"myUserAdmin",
[ { role: "userAdminAnyDatabase", db: "admin" },
{ role: "dbAdminAnyDatabase", db: "admin" },
{ role: "readWriteAnyDatabase", db: "admin" } ]
)
除了先前提供的答案外,还有一种选项是遵循“本地主机异常”方法,如果您的数据库已经启动了访问控制(--auth
开关),则可以使用该方法创建第一个用户。为了实现这一点,您需要拥有对服务器的本地主机访问权限,然后运行:
mongo
use admin
db.createUser(
{
user: "user_name",
pwd: "user_pass",
roles: [
{ role: "userAdminAnyDatabase", db: "admin" },
{ role: "readWriteAnyDatabase", db: "admin" },
{ role: "dbAdminAnyDatabase", db: "admin" }
]
})
对于MongoDB 2.6之前的版本,添加根用户的命令是addUser
(例如)
db.addUser({user:'admin',pwd:'<password>',roles:["root"]})
db.CreateUser
创建用户。在当前的3.4.x版本中也是如此。之前的版本中您需要使用db.addUser
来添加用户。 - Razvan Dumitru前往您的实例中的Mongo
mongo
use admin
db.createUser({user:"Username", pwd:"Password", roles:[{role:"root", db:"admin"}]})
mongod --bind_ip_all --auth
在修改.conf文件后使用此命令:
network interfaces
net:
port: 27017
bindIp: 127.0.0.1,mongodb_server_ip
db.dropUser("myUserAdmin")
。 - ViFImongosh
作为命令,而不是mongo
,例如:mongosh --port 27017
。 - FullStackFool