1. 程式人生 > 資料庫 >MongoDB 3.0+安全許可權訪問控制詳解

MongoDB 3.0+安全許可權訪問控制詳解

1、啟動沒有訪問控制的MongoDB服務

sudo service mongod start

2、連線到例項

mongo --port 27017

指定額外的命令列選項來連線Mongo shell到部署Mongodb伺服器,如--host

3、建立的使用者管理員

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

4、重新啟動MongoDB例項,並啟用訪問控制

1、重新啟動mongod例項,如果使用配置檔案的設定,security.authorization:

vi /etc/mongod.conf

修改內容:

security:
authorization: enabled

2、注意:keys and values之間一定要加空格,否則解析會報錯

重啟服務:

sudo service mongod start

5、使用者管理員身份驗證

1、建立連線mongo shell 時進行授權,指定-u <username>,-p <password>,and the --authenticationDatabase <database>

mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"

2、mongo shell連線時不認證,使用db.auth()授權

use admin
db.auth("myUserAdmin","abc123" )

--------------------伺服器以開啟認證後,如何新增使用者--------------------
1、啟動MongoDB例項的訪問控制

啟動mongod例項 AUTH命令列選項,如果使用配置檔案的設定,security.authorization。

sudo service mongod start

2、通過localhost exception 連線MongoDB例項

新增第一個使用者,使用Localhost Exception,連線一個mongod例項。執行Mongo shell和mongod例項必須來自同一主機

3、同上建立使用者方式相同

--------------------普通使用者安全訪問許可權--------------------
1、啟動MongoDB

service mongod start

2、再次開啟MongoDB shell
1、mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"

2、mongo

use admin
db.auth("myUserAdmin","abc123")

3、show collections:報錯
因為使用者myUserAdmin只用使用者的管理許可權

3、建立使用者,使用者都跟著資料庫走

為myuseradmin建立使用者myUserAdmin在admin 資料庫

use admin
db.createUser(
{
user: "myUserAdmin",db: "admin" } ]
}
)

4、檢視剛剛建立的使用者

show users

5、檢視整個MongoDB全部的使用者

use admin
db.system.users.find()
db.system.users.find().pretty()

6、建立完畢、進行驗證

use test
db.auth('test1','test1')
1
show collections
ypmlist

--------------------修改許可權--------------------

1、updateuser()方法:
1、例項

db.updateUser(
"<username>",
{
customData : { <any information> },
roles : [
{ role: "<role>",db: "<database>" } | "<role>",
...
],
pwd: "<cleartext password>"
},
writeConcern: { <write concern> }
)

2、引數介紹:
1、username:要更新的使用者名稱。

2、update:替換使用者資料的文件,此資料完全取代了使用者的相應資料。

3、writeConcern:可選,寫操作級別。

3、指定要更新的欄位和他們的新值:
1、customData:可選。任意資訊。

2、roles:可選。授予使用者的角色。對角色陣列覆蓋以前的陣列的值更新

3、pwd:可選。使用者密碼

--------------------修改許可權操作--------------------
例項:

use admin
switched to db admin
db.auth("myUserAdmin","abc123" )
1
use test
db.updateUser(
"test1",
{
pwd: "itcast",
customData: { title: "Senior Manager" },
"roles" : [
{
"role" : "readWrite",
"db" : "test"
},
{
"role" : "readWrite",
"db" : "example"
}
}
)

--------------------超級使用者--------------------

use admin
db.createUser(
{
user: "itcast",
pwd: "itcast",
roles: [ { role: "root",db: "admin" } ]
}
)

2、系統預設角色:

1、Read:允許使用者讀取指定資料庫
2、readWrite:允許使用者讀寫指定資料庫
3、dbAdmin:允許使用者在指定資料庫中執行管理函式,如索引建立、刪除,檢視統計或訪問system.profile
4、userAdmin:允許使用者向system.users集合寫入,可以找指定資料庫裡建立、刪除和管理使用者
5、clusterAdmin:只在admin資料庫中可用,賦予使用者所有分片和複製集相關函式的管理許可權。
6、readAnyDatabase:只在admin資料庫中可用,賦予使用者所有資料庫的讀許可權
7、readWriteAnyDatabase:只在admin資料庫中可用,賦予使用者所有資料庫的讀寫許可權
8、userAdminAnyDatabase:只在admin資料庫中可用,賦予使用者所有資料庫的userAdmin許可權
9、dbAdminAnyDatabase:只在admin資料庫中可用,賦予使用者所有資料庫的dbAdmin許可權。
10、root:只在admin資料庫中可用。超級賬號,超級許可權