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 } )