
MongoDB有一个用户管理机制,简单描述为管理用户组,这个组的用户是专门为管理普通用户而设的,暂且称之为管理员。
管理员通常没有数据库的读写权限,只有操作用户的权限,我们只需要赋予管理员 userAdminAnyDatabase 角色即可。另外管理员账户必须在admin数据库下创建。
由于用户被创建在哪个数据库下,就只能在哪个数据库登录,所以把所有的用户都创建在admin数据库下。这样我们切换数据库时就不需要频繁的进行登录了。
先 use admin 切换至admin 数据库进行登录,登录后再use切换其他数据库进行操作即可。第二次的 use就不需要再次登录了。MongoDB设定use第二个数据库时如果登录用户权限比较高就可以直接操作第二个数据库,而不需要登录。
- > show dbs
- > use admin
- > show users
- > db.createUser({
- ... user:"uaad",
- ... pwd:"uaad",
- ... roles:[ {
- ... "role":"userAdminAnyDatabase",
- ... "db":"admin"
- ... }] }
- ... )
- > show users
-
- ·user:用户名
- ·pwd:密码
- ·customData:存放用户相关的自定义数据,该属性也可忽略
- ·roles:数组类型,配置用户的权限
开启身份验证并重启服务:
- [root@sql ~]# vim /usr/local/mongodb/bin/mongodb.conf
- #开启身份验证功能
- auth = true # authorization 的缩写
-
- [root@sql ~]# mongod -f /usr/local/mongodb/bin/mongodb.conf --shutdown
-
- [root@sql ~]# mongod -f /usr/local/mongodb/bin/mongodb.conf
-
- [root@sql ~]# mongo
- > show dbs # 没有登录查看不到信息
- > use admin # 只能到 admin 数据库下登录用户
- switched to db admin
- > db.auth("uaad","uaad")
- 1 # 返回1登录成功,返回0登录失败
- > show dbs
- admin 0.000GB
- config 0.000GB
- local 0.000GB
需求:创建一个test数据库,给这个数据库添加一个用户,用户名为testuser,密码为123456。并授予该用户对test数据库的读写操作权限。
普通用户需要由管理员用户创建,所以先便用管理员用户登录数据库。
- > use admin
- switched to db admin
- > db.auth("uaad","uaad")
- 1
MongoDB没有特定创建数据库的语法,在便用use切换数据库时,如果对应的数据库不存在则直接创建并切换。
- > use test
- switched to db test
- > db.createUser({user:"testuser",pwd:"123456",roles:[{role:"readWrite",db:"test"}]})
- Successfully added user: {
- "user" : "testuser",
- "roles" : [
- {
- "role" : "readWrite",
- "db" : "test"
- }
- ]
- }
如果我们需要对已存在的用户进行角色修改,可以使用 db.updateUser()函数来更新用户角色。注意:执行该函数需要当前用户具有 userAdmin 或 userAdminAnyDatabse 或 root 角色。
db.updateUser("用户名",{"roles":[{"role”:"角色名称",db:"数据库”},{"更新项2":"更新内容"}]})
比如给刚才的 uaad 用户再添加 readWriteAnyDatabase 和 dbAdminAnyDatabase 权限。
- > db.updateUser("uaad", {"roles":[{"role":"userAdminAnyDatabase",db:"admin"},{role:"readWriteAnyDatabase",db:"admin"},{role:"dbAdminAnyDatabase",db:"admin"}]})
- > show users
- {
- "_id" : "admin.uaad",
- "userId" : UUID("b6532586-b403-4cb0-9a10-a0c84ee8ce9e"),
- "user" : "uaad",
- "db" : "admin",
- "roles" : [
- {
- "role" : "userAdminAnyDatabase",
- "db" : "admin"
- },
- {
- "role" : "readWriteAnyDatabase",
- "db" : "admin"
- },
- {
- "role" : "dbAdminAnyDatabase",
- "db" : "admin"
- }
- ],
- "mechanisms" : [
- "SCRAM-SHA-1",
- "SCRAM-SHA-256"
- ]
- }
更新用户密码有以下两种方式,更新密码时需要切换到该用户所在的数据库。注意:需要使用具有 userAdmin或 userAdminAnyDatabse 或 root 角色的用户执行:
通过 db.dropUser()函数可以删除指定用户,删除成功以后会返回true。删除用户时需要切换到该用户所在的数据库。注意:需要使用具有 userAdmin 或 userAdminAnyDatabse 或 root 角色的用户才可以删除其他用户。
- > use admin
- switched to db admin
- > db.auth("uaad","uaad")
- 1
- > use test
- switched to db test
- > show users
- {
- "_id" : "test.testuser",
- "userId" : UUID("ae6e219d-3c1c-41ba-a8d6-1ab6724dd480"),
- "user" : "testuser",
- "db" : "test",
- "roles" : [
- {
- "role" : "readWrite",
- "db" : "test"
- }
- ],
- "mechanisms" : [
- "SCRAM-SHA-1",
- "SCRAM-SHA-256"
- ]
- }
- > db.dropUser("testuser")
- true
- > show users