关于用户的认证及权限

   用户是跟着库创建的,在哪个库创建的什么权限的什么用户,只对此库有相应权限(除超级管理员以外)。

用户管理和认证方法

    官网文档:https://docs.mongodb.com/master/reference/security/#security-methods-in-the-mongo-shell

mongodb设置安全用户之后如何用shell登录 mongodb权限认证_mongodb

角色管理方法

    官方详细档:https://docs.mongodb.com/master/reference/security/#security-methods-in-the-mongo-shell

mongodb设置安全用户之后如何用shell登录 mongodb权限认证_用户权限_02

1、内建角色

  • Read:允许用户读取指定数据库
  • readWrite:允许用户读写指定数据库
  • dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
  • userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
  • clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
  • readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
  • readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
  • userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
  • dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
  • root:只在admin数据库中可用。超级账号,超级权限

userAdminAnyDatabase 角色,用来管理用户,可以通过这个角色来创建、删除用户

root角色,超级管理员角色,可对所有库,所有用户做创建,删除,插入数据等操作

user:用户名 

pwd:密码 

role:指定用户的角色,可以用一个空数组给新用户设定空角色;在 role 字段可以指定内置角色和用户定义的角色

2、常用查询删除命令

   查看mongodb的所有用户: use admin; db.system.users.find().pretty()

   查看相应库下的用户:use database; show users

   删除用户:use database; db.dropUser('test') 或use admin; db.system.users.remove({user:"admin"})

   删除当前库:use database; db.dropDatabase()

   重置用户密码:db.changeUserPassword("wsy","wushaoyu")开启用户权限认证的情况下,需要管理员来操作重置密码

   验证用户权限:use database;  db.auth("wsy","wushaoyu")  为1则正确

3、创建用户

在admin数据库中添加管理员账户:

use admin
db.createUser({
... user: "admin",
... pwd: "admin",
... roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
... });

创建超级管理员用户:

db.createUser(
... {
... user: "root",
... pwd: "root",
... roles: [ { role: "root", db: "admin" } ]
... }
... );

给相应库创建相应用户及权限,在wsy数据库中添加wsy用户:

db.createUser({ 
... user:'wsy', 
... pwd:'wushaoyu', 
... roles:[ 
... {role:'readWrite',db:'wsy'} 
... ]})

4、开启用户权限认证功能,在配置文件加入以下2行配置

security:
  authorization: enabled

#重启mongodb服务

[root@mongodb02 ~]# /etc/init.d/mongod restart
#验证用户权限
[root@mongodb04 ~]# mongo --host 192.168.1.7
> use wsy
> db.auth("wsy","wushaoyu")
1


5、重置用户的密码

#切换到root超级管理员角色

> use admin
switched to db admin
> db.auth("root","root")
1

#重置wsy用户的密码

务必切换到wsy库,否则报错,在admin库找不到wsy用户
> db.changeUserPassword("wsy","WuShaoYu")
2019-03-02T19:01:41.375+0800 E QUERY [js] Error: Updating user failed: User wsy@admin not found :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
DB.prototype.updateUser@src/mongo/shell/db.js:1541:15
DB.prototype.changeUserPassword@src/mongo/shell/db.js:1545:9
@(shell):1:1
> use wsy(
switched to db wsy
> db.changeUserPassword("wsy","WuShaoYu")
>

#测试wsy用户密码是否修改成功

> db.auth("wsy","wushaoyu")
Error: Authentication failed.
0
> db.auth("wsy","WuShaoYu")
1
#可看出修改密码成功