MongoDB用户权限认证

关于用户的认证及权限

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

用户管理和认证方法

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

角色管理方法

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

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
#可看出修改密码成功

 参考文档:

https://docs.mongodb.com/manual/tutorial/enable-authentication/

https://docs.mongodb.com/manual/core/security-built-in-roles/   

https://blog.csdn.net/Keith003/article/details/80897085

原文地址:https://www.cnblogs.com/wushaoyu/p/10460928.html