首页 > 代码库 > MongoDB 入门之基础 DCL

MongoDB 入门之基础 DCL

此文章主要记录部分主要的 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 insteadSuccessfully 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 开启了权限模式,并且某一个数据库没有任何用户时,在不验证权限的情况下,可以创建一个用户,当继续创建第二个用户时,会返回错误,若想继续创建用户则必须登录。

    2014-10-16T10:40:41.904+0800 Error: couldnt 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"... }...   ]... })2014-10-16T10:48:01.223+0800 Error: couldnt 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 adminswitched 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 mydbswitched to db mydb> db.auth("user","abc123_")1>

MongoDB 入门之基础 DCL