1. 程式人生 > 其它 >Mongodb 基於角色的訪問控制

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