基于角色的访问控制
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")