[Doc]MongoDB用戶創建與啟用access-control
文檔鏈接: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