Mongodb 基於角色的訪問控制
阿新 • • 發佈:2022-05-20
基於角色的訪問控制
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")