1. 程式人生 > >[Doc]MongoDB用戶創建與啟用access-control

[Doc]MongoDB用戶創建與啟用access-control

感覺 mongod min radmin 副本 ica 行操作 int erro

文檔鏈接:https://docs.mongodb.com/manual/tutorial/enable-authentication/

Pre

個人總感覺數據庫的文檔結構不太友好, 不太解決問題。以下按照原文檔結構翻譯:


下面的教程以一個使用了默認認證機制的standalone mongod實例為背景來演示啟用認證。

副本和集群分片的賬戶認證

請參考:

https://docs.mongodb.com/manual/core/security-internal-authentication/

賬戶管理

在啟用access-control前,請先確認在admin數據庫中,存在userAdmin或userAdminAnyDatabase角色的賬戶。

該角色賬戶擁有以下權限:創建賬戶、賦予賬戶角色、廢除賬戶角色、創建/修改賬戶角色。

在啟用access-control前後都可以創建賬戶。

如果還未創建任何賬戶便啟用access-control,則MongoDB會拋出一個localhost exception,允許用戶在admin數據庫中創建一個賬戶管理員賬號。一旦管理員賬號建立,用戶以賬戶管理員賬號登陸後,才能添加其他賬戶。

步驟

以下步驟演示在未啟用access-control的MongoDB實例中首次添加用戶,然後開啟的操作。

1. 不啟用access-control啟動MongoDB

mongod --port 27017
--dbpath /data/db

2. 連接到實例(本地)

mongo --port 27017

3. 創建用戶管理員

創建一個userAdminAnyDatabase角色的用戶。

> use admin

> db.createUser(
  {
     user: "UserAdmin",
     pwd: "UserAdminPwd",
     roles: [{ role: userAdminAnyDatabase, db: admin }]
  }
)

退出mongo shell

4. 啟用access-control,重啟mongoDB

使用--auth選項重啟mongod實例

mongod --auth --port 27017 --dbpath /data/db

啟用access-control之後,用戶需要先登陸才能進行操作。用戶能夠執行的操作由賬戶歸屬的角色決定。

5. 以管理員賬號登陸

通過mongo shell,用戶可以:

  • 在連接實例時認證
  • 進入shell, 通過db.auth()進行用戶認證

連接時認證

mongo --port 27017 -u UserAdmin -p UserAdminPwd --authenticationDatabase "admin"

連接後認證

mongo --port 27017

> use admin

> db.auth(UserAdmin, UserAdminPwd)

6. 創建其他賬戶

一旦登陸了管理員賬戶之後,就可以通過db.createUser()來創建其他賬戶。賬戶可以賦予mongoDB內置的角色權限,也可以自定義角色權限。

Mongo內置用戶角色見:https://docs.mongodb.com/manual/core/security-built-in-roles/

自定義用戶角色見:https://docs.mongodb.com/manual/core/security-user-defined-roles/

賬戶管理員賬號UserAdmin只有管理賬戶和角色的權限。若UserAdmin企圖執行其他操作,如從test數據庫中的foo集合讀取數據,MongoDB會返回一個error。

以下是創建一個賬戶的操作

> use test

> db.createUser(
  {
    user: "myTester",
    pwd: "xyz123",
    roles: [ { role: "readWrite", db: "test" },
             { role: "read", db: "reporting" } ]
  }
)

7. 使用myTester賬戶登陸

連接時認證

mongo --port 27017 -u "myTester" -p "xyz123" --authenticationDatabase "test"

連接後認證

mongo --port 27017

> use test

> db.auth("myTester", "xyz123" )

myTester用戶往集合插入數據

> db.foo.insert( { x: 1, y: 1 } )

[Doc]MongoDB用戶創建與啟用access-control