此文章主要记录部分主要的 MongoDB 的 DCL 操作。
MongoDB 默认不需要用户名和密码就可以用 mongodb.exe 登录
一、开启 MonogoDB 的权限模式
修改 MongoDB 服务的注册语句,修改加入 --auth 参数,详情见MongoDB 入门之安装篇
"$MONGODB_HOME\bin\mongod.exe" --config "$MONGODB_HOME\mongo.cfg" --install --auth
C:\Windows\System32\sc.exe create MongoDB binPath= "\"$MONGODB_HOME\bin\mongod.exe\" --service --auth --config=\"$MONGODB_HOME\mongo.cfg\"" DisplayName= "MongoDB 2.6 Standard" start= "auto"
或者在mongod.cfg 中添加配置
auth=true
二、用户权限管理
- 创建用户
> db.addUser("user","abc123_")
WARNING: The 'addUser' shell helper is DEPRECATED. Please use 'createUser' instead
Successfully added user: { "user" : "user", "roles" : [ "dbOwner" ] }
>可以看到当执行 addUser 命令是出现 wraning,虽然创建成功了,但是 MongoDB 建议使用 createUser。
> db.createUser({
... user:"user",
... pwd:"abc123_",
... roles:[
... {
... role:"dbOwner",
... db:"mydb"
... }
... ]
... })
Successfully added user: {
"user" : "user",
"roles" : [
{
"role" : "dbOwner",
"db" : "mydb"
}
]
}
>如果 MongoDB 开启了权限模式,并且某一个数据库没有任何用户时,在不验证权限的情况下,可以创建一个用户,当继续创建第二个用户时,会返回错误,若想继续创建用户则必须登录。
--16T10::41.904+ Error: couldn't add user: not authorized on mydb to execute command { createUser: "test", pwd: "xxx", roles: [ { role: "dbOwner", db: "mydb" } ], digestPassword: false, writeConcern: { w: "majority", wtimeout: 30000.0 } } at src/mongo/shell/db.js:1004
> 创建超级管理员
创建超级管理员需要未开启权限模式的情况下执行。如果已开启权限而在 admin 下创建超级管理员,会出现如下错误> db.createUser({
... user:"admin",
... pwd:"admin",
... roles:[
... {
... role:"userAdminAnyDatabase",
... db:"admin"
... }
... ]
... })
--16T10::01.223+ Error: couldn't add user: not authorized on admin to execute command { createUser: "admin", pwd: "xxx", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ], digestPassword: false, writeConcern: { w: "majority", wtimeout: 30000.0 } } at src/mongo/shell/db.js:1004
>关闭权限模式创建超级管理员
> use admin
switched to db admin
> db.createUser({
... user:"admin",
... pwd:"admin",
... roles:[
... {
... role:"userAdminAnyDatabase",
... db:"admin"
... }
... ]
... })
Successfully added user: {
"user" : "admin",
"roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
}
]
}
>如果使用 addUser 创建超级管理员还必须切换到 admin 数据库。
- 删除用户
> db.dropUser("user")
true
> - 登录
anth 需要登录用户有该数据库的权限> use mydb
switched to db mydb
> db.auth("user","abc123_") >