mongodb關於使用者許可權的總結
官方文件
總結
1、mongodb啟動的時候加了--auth引數,則mongo命令連線到mongodb資料庫後,執行show dbs這樣的操作都會報錯,需要執行db.auth("user","PWD")驗證使用者密碼正確後,才能執行操作,且該user有什麼許可權就只能執行什麼操作
2、授權操作可以在建立使用者db.createUser的時候授權,也可以使用db.grantRolesToUser對已存在使用者授權
3、mongodb的使用者是放在一個個的資料庫裡面,比如db.system.users.find()顯示_id為db1.user1表示在db1庫中建立了一個使用者user1,_id為db2.user1表示在db2庫中建立了一個使用者user1,和mysql使用者模式user@host有點類似
4、root、readWriteAnyDatabase等角色的使用者必須繫結admin庫,不是說root角色的使用者只能在admin庫中建立,如下在test1庫中建立使用者名稱為root的使用者,擁有root角色繫結了admin庫,以後在test1庫中執行auth正常後,可以執行任何操作。當然這個test1庫中建立的root使用者在admin庫中執行auth會報錯Error: Authentication failed,因為這個使用者並不是admin庫中的使用者
>use test1
>db.createUser({user:"root",pwd:"123456",roles:[{role:"root",db:"admin" }]})
5、mongodb中admin資料庫是一個特別的資料庫,一些角色只能在admin庫中用,但是不代表admin庫中的使用者就擁有所有許可權,如下在admin庫中建立一個使用者admin_user,這個使用者只在admin庫中有讀許可權,無法讀其他資料庫。
>use admin
>db.createUser({user:"admin_user",pwd:"123456",roles:["read"]})
6、db.auth("user","PWD")驗證時,這個使用者user必須存在當前資料庫下,如果當前資料庫下不存在這樣使用者則會報錯。不能說具有root角色的使用者可以在任何資料庫中執行db.auth驗證,只能說具有root角色的使用者1在這個使用者1指定的資料庫中執行db.auth驗證後,可以訪問其他所有資料庫
7、異機使用mongo命令連線mongodb資料庫伺服器的資料庫時,必須指定該資料庫存在的使用者名稱和密碼。如下192.168.0.10/test1庫存在一個root超級管理員角色的使用者root密碼是123456,在test1庫中執行db.auth("root","123456")後是可以訪問所有資料庫的,但是192.168.0.10/test123庫不存在這樣的使用者。則前一條語句可以正常連線,後一條語句報錯Error: Authentication failed無法連線。
mongo 192.168.0.10/test1 -u root -p "123456" --正常,可以連線
mongo 192.168.0.10/test123 -u root -p "123456" --報錯,認證失敗,無法連線
8、mongodb檢視當前使用者使用命令db.runCommand({connectionStatus:1}),就像oracle執行show users可以顯示當前會話的使用者
建立使用者的時候授權db.createUser
>use test1
>db.createUser({user:"a1",pwd:"123456",roles:[{role:"clusterAdmin",db:"admin" },{role:"readAnyDatabase",db:"admin" },{role:"readWrite",db:"test"},"readWrite"]})
在test1這個資料庫中建立了一個使用者a1,這個使用者擁有叢集管理許可權、查詢任何資料庫的許可權、讀寫test資料庫許可權、讀寫test1資料庫的許可權,最後一個readwrite沒有標明資料庫表示在本地資料庫的許可權即在test1這個資料庫的許可權
這個使用者a1,show users時只能在test1這個資料庫看到,在admin這個資料庫執行show users看不這個使用者a1,因為這個使用者不是admin下面的使用者
readAnyDatabase角色必須繫結admin庫,否則報錯
>db.createUser({user:"a2",pwd:"123456",roles:[{role:"readAnyDatabase",db:"test" }]})
報錯[thread1] Error: couldn't add user: No role named readAnyDatabase@test
readAnyDatabase只在admin中可用,把db:"test"改成db:"admin"即可
授予許可權db.grantRolesToUser
>use test1
>db.grantRolesToUser("a1",[{role:"readWrite",db:"test2"}])
對資料庫test1中的a1使用者授予test2資料庫的讀寫許可權
取消許可權db.revokeRolesFromUser
>use test1
>db.revokeRolesFromUser("a1",[{role:"readWrite",db:"test2"}])
對資料庫test1中的a1使用者取消test2資料庫的讀寫許可權
查詢使用者的三種方法
>show users --只能檢視當前資料庫下的使用者
>use admin
>db.system.users.find() --必須進入admin資料庫執行,能查詢所有資料庫下的所有使用者
>db.system.users.find().pretty() --必須進入admin資料庫執行,能查詢所有資料庫下的所有使用者,結果顯示介面比db.system.users.find()友好
如果不是進入admin資料庫而是進入其他資料庫比如A執行上面兩個,沒有返回結果,就算這個資料庫A下有使用者。
刪除使用者
>db.dropAllUsers();--刪除當前庫下面的所有使用者,其他庫的使用者不受影響
>db.dropUser('a3');--刪除當前庫下面的a3使用者
驗證使用者
>use test1
>db.auth("a1","123456")
對資料庫test1中的a1使用者進行驗證,首先在test1庫中,a1使用者必須存在,其次a1使用者的密碼必須是123456,才能驗證成功
結果返回1表示成功
mongodb啟動時沒有用--auth引數,mongo命令連線後也可以執行db.auth
use db
db.createUser({user:"admin2",pwd:"123456",roles:[{role:"userAdminAnyDatabase",db:"admin"}]})
db.auth("admin2","admin2")--報錯Error: Authentication failed
db.auth("admin2","123456")
角色列表
Read:允許使用者讀取指定資料庫
readWrite:允許使用者讀寫指定資料庫
dbAdmin:允許使用者擁有指定資料庫的的所有許可權,如資料庫或集合或索引的建立、刪除,檢視
userAdmin:允許使用者向system.users集合寫入,可以找指定資料庫裡建立、刪除和管理使用者及角色
clusterAdmin:只在admin資料庫中可用,賦予使用者所有分片和複製集相關函式的管理許可權。
readAnyDatabase:只在admin資料庫中可用,賦予使用者所有資料庫的讀許可權
readWriteAnyDatabase:只在admin資料庫中可用,賦予使用者所有資料庫的讀寫許可權
userAdminAnyDatabase:只在admin資料庫中可用,賦予使用者所有資料庫的userAdmin許可權
dbAdminAnyDatabase:只在admin資料庫中可用,賦予使用者所有資料庫的dbAdmin許可權。
root:只在admin資料庫中可用。超級賬號,超級許可權
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30126024/viewspace-2647939/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- postgresql關於許可權的總結SQL
- MongoDB 使用者與許可權管理MongoDB
- Sql Server關於許可權、角色以及登入名、使用者名稱的總結SQLServer
- mongodb 的許可權系統MongoDB
- 關於動態許可權
- 關於mysql許可權管理MySql
- Android動態許可權總結Android
- 總結sysdba和sysoper許可權
- 基於vue的簡單許可權管理實現總結Vue
- odoo 許可權管理學習總結Odoo
- Vue許可權路由實現總結Vue路由
- MongoDB建立只讀使用者並授權指定集合的查詢許可權MongoDB
- mongoDB 3.0 安全許可權訪問MongoDB
- 關於公司程式碼許可權的問題
- CDB和PDB關於使用者建立和使用者許可權區別
- vue許可權路由實現方式總結Vue路由
- mysql 使用者及許可權管理 小結MySql
- MongoDB使用者許可權管理,設定密碼並連線MongoDB密碼
- 關於SQL Server資料庫中的使用者許可權和角色管理SQLServer資料庫
- k8s結合jumpserver做kubectl許可權控制 使用者在多個namespaces的訪問許可權 rbac許可權控制K8SServernamespace訪問許可權
- Linux使用者/使用者組/許可權相關命令Linux
- MongoDB入門系列(四):許可權管理MongoDB
- postgresql關於訪問檢視需要的許可權SQL
- 關於許可權系統的一些思考
- 關於系統許可權的設計-位操作
- linux使用者許可權Linux
- vue許可權路由實現方式總結二Vue路由
- 使用者和組的許可權
- pg許可權相關
- Android14 關於讀寫許可權 (Vivo)Android
- 兩個關於許可權設定的問題思考
- mongoDB安裝時提示沒有許可權MongoDB
- Linux使用者與許可權Linux
- mysql使用者許可權管理MySql
- MongoDB4.0建立自定義許可權(只有查詢,插入和更新的許可權)的角色步驟MongoDB
- 由於GDPR Instapaper暫時關閉了歐洲使用者的訪問許可權訪問許可權
- NAS使用者許可權的設定
- 關於LINUX許可權-bash: ./startup.sh: Permission deniedLinux