MongoDB資料庫授權認證

2022-01-02 22:00:18

MongoDB資料庫授權認證

1.與使用者相關的命令

db.auth() 將使用者驗證到資料庫。
db.changeUserPassword() 更改現有使用者的密碼。
db.createUser() 建立一個新使用者。
db.dropUser() 刪除單個使用者。
db.dropAllUsers() 刪除與資料庫關聯的所有使用者。
db.getUser() 返回有關指定使用者的資訊。
db.getUsers() 返回有關與資料庫關聯的所有使用者的資訊。
db.grantRolesToUser() 授予使用者角色及其特權。
db.removeUser() 已過時。從資料庫中刪除使用者。
db.revokeRolesFromUser() 從使用者中刪除角色。
db.updateUser() 更新使用者資料。

2.設定mongodb登陸授權認證

2.1.建立一個使用者

> use admin
> db.createUser(
{
   user: "admin",
   pwd: "123456", 
   roles: [ { role: "root", db: "admin" } ]			//指定角色為root,表示管理員
}
> db.getUsers()

在這裡插入圖片描述

2.2.修改組態檔啟用使用者認證

[mongo@mongodb-1 ~]$ vim /data/mongodb_cluster/mongodb_27017/conf/mongodb.yml 
security:
  authorization: enabled

2.3.重新啟動mongodb

[mongo@mongodb-1 ~]$ mongod -f /data/mongodb_cluster/mongodb_27017/conf/mongodb.yml --shutdown
killing process with pid: 17899
[mongo@mongodb-1 ~]$ mongod -f /data/mongodb_cluster/mongodb_27017/conf/mongodb.yml 
about to fork child process, waiting until server is ready for connections.
forked process: 18511
child process started successfully, parent exiting

2.4.使用口令登陸mongodb

[mongo@mongodb-1 ~]$ mongo -uadmin -p123456
MongoDB shell version v4.0.14
connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("ae65176e-ac6b-4906-b621-496996381417") }
MongoDB server version: 4.0.14
> show dbs

使用口令登陸後會發現最後一個警告資訊也會消失

在這裡插入圖片描述

3.授權使用者並賦予多個許可權

mongodb可以建立多個使用者並針對不同的庫進行不同的操作

3.1.建立使用者並製造資料

1.建立使用者
[mongo@mongodb-1 ~]$ mongo -uadmin -p123456
> db.createUser(
...   {
...     user: "mytest",
...     pwd: "123456", 
...     roles: [ { role: "readWrite", db: "test" },		//可讀可寫
...              { role: "read", db: "test2" }   ]					//可讀
...   }
... )


2.插入資料
test庫
> use test
> db.test.insert({"name":"xiaoming","age":10})
> db.test.insert({"name":"xiaohong","age":10})
> db.test.insert({"name":"xiaolan","age":10})

test2庫
> use test2
> db.test2.insert({"name":"jiangxl","job":"it","age":"99"})
> db.test2.insert({"name":"wanger","job":"it","age":"99"})

在這裡插入圖片描述

3.2.使用mytest登入test庫驗證許可權

1.登入mytest使用者並連線到tets庫
[mongo@mongodb-1 ~]$ mongo -umytest -p123456 192.168.81.210:27017/test

2.檢視所有表
> show tables
hash
test

3.檢視是否有讀許可權
> db.test.find()
{ "_id" : ObjectId("602c73b5d9d09b9b700c9eb2"), "name" : "xiaoming", "age" : 10 }
{ "_id" : ObjectId("602c73bdd9d09b9b700c9eb3"), "name" : "xiaohong", "age" : 10 }
{ "_id" : ObjectId("602c73c1d9d09b9b700c9eb4"), "name" : "xiaolan", "age" : 10 }

4.檢視是否有寫入許可權
> db.test.insert({"name":"xiaozhang","age":10})

5.檢視是否寫入成功
> db.test.find()
{ "_id" : ObjectId("602c73b5d9d09b9b700c9eb2"), "name" : "xiaoming", "age" : 10 }
{ "_id" : ObjectId("602c73bdd9d09b9b700c9eb3"), "name" : "xiaohong", "age" : 10 }
{ "_id" : ObjectId("602c73c1d9d09b9b700c9eb4"), "name" : "xiaolan", "age" : 10 }
{ "_id" : ObjectId("602c74f949b9d3f400ed866b"), "name" : "xiaozhang", "age" : 10 }

可讀可寫

在這裡插入圖片描述

3.3.使用mytest登入test2庫驗證許可權

由於普通使用者只能登入test庫因此想要切換其他庫,只能是登陸test庫後使用use進行切換

1.登入test庫
[mongo@mongodb-1 ~]$ mongo -umytest -p123456 192.168.81.210:27017/test

2.切換到tets2庫
> use test2

3.檢視表
> show tables
test2

4.檢視表中資料
> db.test2.find()

5.插入一條資料,檢視是否插入成功
> db.test2.insert({"name":"xiaozi","job":"it","age":"99"})
WriteCommandError({
	"ok" : 0,
	"errmsg" : "not authorized on test2 to execute command { insert: \"test2\", ordered: true, lsid: { id: UUID(\"6203f7df-d8f8-4880-aab3-4db712ae785f\") }, $db: \"test2\" }",
	"code" : 13,
	"codeName" : "Unauthorized"
})

可以看到只能讀取,不能插入

在這裡插入圖片描述