> 文章列表 > mongodb使用使用 SCRAM 验证客户端设置访问控制

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

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

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 passwordroles: [{ 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 } )