【发布时间】:2016-12-19 16:06:59
【问题描述】:
我在本地和生产中使用相同的连接字符串。
当连接字符串为mongodb://localhost/mydb时
用户名和密码是什么? 保持这种方式安全吗?
【问题讨论】:
标签: mongodb
我在本地和生产中使用相同的连接字符串。
当连接字符串为mongodb://localhost/mydb时
用户名和密码是什么? 保持这种方式安全吗?
【问题讨论】:
标签: mongodb
默认情况下 mongodb 没有启用访问控制,因此没有默认用户或密码。
要启用访问控制,请使用命令行选项--auth 或security.authorization 配置文件设置。
您可以使用以下过程或参考 MongoDB 文档中的Enabling Auth。
在没有访问控制的情况下启动 MongoDB。
mongod --port 27017 --dbpath /data/db1
连接到实例。
mongo --port 27017
创建用户管理员。
use admin
db.createUser(
{
user: "myUserAdmin",
pwd: "abc123",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
使用访问控制重新启动 MongoDB 实例。
mongod --auth --port 27017 --dbpath /data/db1
以用户管理员身份进行身份验证。
mongo --port 27017 -u "myUserAdmin" -p "abc123" \
--authenticationDatabase "admin"
【讨论】:
db.dropUser("myUserAdmin")
除了@Camilo Silva 已经提到的,如果您想免费访问创建数据库、读取、写入数据库等,但您不想创建 root 角色,您可以将第三步更改为以下:
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" } ]
)
【讨论】:
对于 2.6 之前的 MongoDB,添加 root 用户的命令是addUser(例如)
db.addUser({user:'admin',pwd:'<password>',roles:["root"]})
【讨论】:
db.addUser。从 2.6 开始,在当前版本 3.4.x 中,您可以使用 db.CreateUser 创建用户。
db.createUser ;) (docs.mongodb.com/manual/reference/method/db.createUser)
除了之前提供的答案之外,如果您的数据库已经使用访问控制(--auth 开关)启动,一个选项是按照“本地主机异常”方法创建第一个用户。为此,您需要拥有对服务器的 localhost 访问权限,然后运行:
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 文档中所述:
localhost 异常允许您启用访问控制,然后在系统中创建第一个用户。对于 localhost 例外,启用访问控制后,连接到 localhost 界面并在 admin 数据库中创建第一个用户。第一个用户必须具有创建其他用户的权限,例如具有 userAdmin 或 userAdminAnyDatabase 角色的用户。使用 localhost 异常的连接只能在 admin 数据库上创建第一个用户。
这是文档中section 的链接。
【讨论】:
在您的实例中转到 mongo
mongo
use admin
db.createUser({user:"Username", pwd:"Password", roles:[{role:"root", db:"admin"}]})
【讨论】: