mongodb使用使用 SCRAM 验证客户端设置访问控制

119 阅读1分钟

1、在没有访问控制的情况下启动 MongoDB

启动没有访问控制的mongodb实例,打开终端并以mongod用户身份运行以下命令:

mongod --port 27017 --dbpath /var/lib/mongodb

若是按照我前几篇的步骤来的,则查看数据库是否启动即可。

2、连接到实例

mongosh --port 27017

3、创建用户管理员

切换到admin库 创建具有 userAdminAnyDatabase和 readWriteAnyDatabase角色的用户

use admin
db.createUser(
  {
    user: "myUserAdmin",
    pwd: passwordPrompt(), // or cleartext password
    roles: [
      { role: "userAdminAnyDatabase", db: "admin" },
      { role: "readWriteAnyDatabase", db: "admin" }
    ]
  }
)

以上代码运行后会提示输入密码,输入即可。

myUserAdmin用户具有的权限:

创建用户 授予或撤销用户的角色 创建或修改自定义角色 读写任何数据库 管理和操作任何数据库

说明白点,他就是超级管理员root

4、重启数据库

5、以用户管理员的身份连接

连接后验证

mongosh --port 27017
use admin
db.auth("myUserAdmin", passwordPrompt()) // or 直接将passwordPrompt()替换为密码

连接时认证

mongosh --port 27017  --authenticationDatabase \
    "admin" -u "myUserAdmin" -p

6、创建自定义角色

管理操作角色

db.createRole(
   {
     role: "manageOpRole", 
     privileges: [
       { resource: { cluster: true }, actions: [ "killop", "inprog" ] },
       { resource: { db: "", collection: "" }, actions: [ "killCursors" ] }
     ],
     roles: []
   }
)

新角色授予终止任何操作的权限。(该权限使用要注意)

要运行的角色

db.createRole(
   {
     role: "mongostatRole", 
     privileges: [
       { resource: { cluster: true }, actions: [ "serverStatus" ] }
     ],
     roles: []
   }
)

该角色可以操作集群

7、修改角色权限

确定用户的角色和权限 要显示要修改的用户的角色和权限,可以使用 db.getUser()和db.getRole()方法。

例子:(查看reportsUser在reporting库中的角色)

use reporting
db.getUser("reportsUser")

要为该角色授予reporting的数据库权限 readWrite:

use reporting
db.getRole( "readWrite", { showPrivileges: true } )