Mongodb 基于角色的访问控制

基于角色的访问控制

1.官网介绍

https://docs.mongodb.com/manual/core/authorization/
https://docs.mongodb.com/manual/tutorial/enable-authentication/
https://docs.mongodb.com/manual/reference/built-in-roles/

2.与用户相关的命令

db.auth() 将用户验证到数据库。
db.changeUserPassword() 更改现有用户的密码。
db.createUser() 创建一个新用户。
db.dropUser() 删除单个用户。
db.dropAllUsers() 删除与数据库关联的所有用户。
db.getUser() 返回有关指定用户的信息。
db.getUsers() 返回有关与数据库关联的所有用户的信息。
db.grantRolesToUser() 授予用户角色及其特权。
db.removeUser() 已过时。从数据库中删除用户。
db.revokeRolesFromUser() 从用户中删除角色。
db.updateUser() 更新用户数据。

3.在未开启用户访问控制的实例下创建管理员账户

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

4.查看创建的用户

> db.getUsers()
[
        {
                "_id" : "admin.myUserAdmin",
                "userId" : UUID("bd30449e-6147-41b4-9af7-10c7f4174944"),
                "user" : "myUserAdmin",
                "db" : "admin",
                "roles" : [
                        {
                                "role" : "userAdminAnyDatabase",
                                "db" : "admin"
                        },
                        {
                                "role" : "readWriteAnyDatabase",
                                "db" : "admin"
                        }
                ],
                "mechanisms" : [
                        "SCRAM-SHA-1",
                        "SCRAM-SHA-256"
                ]
        }
]

5.配置访问控制

vim /opt/mongo_27017/conf/mongodb.conf
security:
    authorization: enabled

6.重启mongo

systemctl restart mongod

7.使用admin登陆

mongo --authenticationDatabase "admin" -u "myUserAdmin" -p

8.使用admin账户创建普通账户

use test
db.createUser(
  {
    user: "myTester",
    pwd:  "123456",
    roles: [ { role: "readWrite", db: "db1" },
             { role: "read", db: "db2" } ]
  }
)
db.getUsers()

9.使用admin账户创建测试数据

use db1
db.write.insertOne({"name":"readWrite"})

use db2
db.read.insertOne({"name":"read"})

10.退出admin账户,使用test账户登陆

mongo --authenticationDatabase "test" -u "myTester" -p  
show dbs

11.验证普通账户权限

show dbs
use db1
show tables	
db.write.find()										#正常读
db.write.insertOne({name:"ok"})		#正常写

use db2
show tables	
db.read.find()										#正常读
db.read.insertOne({name:"ok"})		#不能写

12.使用admin用户修改普通用户权限并创建测试语句

mongo --authenticationDatabase "admin" -u "myUserAdmin" -p
use test
db.getUsers()
db.updateUser(
  "myTester",
  {
    roles: [ { role: "read", db: "db1" },
             { role: "readWrite", db: "db2" },
             { role: "readWrite", db: "test" }]
  }
)
db.getUsers()
db.user.insert({name:"test"})

13.切换普通账户登陆并测试

mongo --authenticationDatabase "test" -u "myTester" -p
show dbs
use db1
show tables	
db.write.find()										#正常读
db.write.insertOne({name:"ok"})		#不可写

use db2
show tables	
db.read.find()										#正常读
db.read.insertOne({name:"ok"})		#正常写

use test
show tables	
db.user.find()										#正常读
db.user.insertOne({name:"ok"})		#正常写

14.删除用户

mongo --authenticationDatabase "admin" -u "myUserAdmin" -p
use test
db.dropUser("myTester")

posted @ 2022-05-20 12:02  hai起奈  阅读(29)  评论(0编辑  收藏  举报