關於用戶的認證及權限
用戶是跟着庫創建的,在哪個庫創建的什么權限的什么用戶,只對此庫有相應權限(除超級管理員以外)。
用戶管理和認證方法
官網文檔:https://docs.mongodb.com/master/reference/security/#security-methods-in-the-mongo-shell

角色管理方法
官方詳細檔:https://docs.mongodb.com/master/reference/security/#security-methods-in-the-mongo-shell

1、內建角色
- Read:允許用戶讀取指定數據庫
- readWrite:允許用戶讀寫指定數據庫
- dbAdmin:允許用戶在指定數據庫中執行管理函數,如索引創建、刪除,查看統計或訪問system.profile
- userAdmin:允許用戶向system.users集合寫入,可以找指定數據庫里創建、刪除和管理用戶
- clusterAdmin:只在admin數據庫中可用,賦予用戶所有分片和復制集相關函數的管理權限。
- readAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的讀權限
- readWriteAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的讀寫權限
- userAdminAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的userAdmin權限
- dbAdminAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的dbAdmin權限。
- root:只在admin數據庫中可用。超級賬號,超級權限
userAdminAnyDatabase 角色,用來管理用戶,可以通過這個角色來創建、刪除用戶
root角色,超級管理員角色,可對所有庫,所有用戶做創建,刪除,插入數據等操作
user:用戶名
pwd:密碼
role:指定用戶的角色,可以用一個空數組給新用戶設定空角色;在 role 字段可以指定內置角色和用戶定義的角色
2、常用查詢刪除命令
查看mongodb的所有用戶: use admin; db.system.users.find().pretty()
查看相應庫下的用戶:use database; show users
刪除用戶:use database; db.dropUser('test') 或use admin; db.system.users.remove({user:"admin"})
刪除當前庫:use database; db.dropDatabase()
重置用戶密碼:db.changeUserPassword("wsy","wushaoyu")開啟用戶權限認證的情況下,需要管理員來操作重置密碼
驗證用戶權限:use database; db.auth("wsy","wushaoyu") 為1則正確
3、創建用戶
在admin數據庫中添加管理員賬戶:
use admin
db.createUser({
... user: "admin",
... pwd: "admin",
... roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
... });
創建超級管理員用戶:
db.createUser(
... {
... user: "root",
... pwd: "root",
... roles: [ { role: "root", db: "admin" } ]
... }
... );
給相應庫創建相應用戶及權限,在wsy數據庫中添加wsy用戶:
db.createUser({
... user:'wsy',
... pwd:'wushaoyu',
... roles:[
... {role:'readWrite',db:'wsy'}
... ]})
4、開啟用戶權限認證功能,在配置文件加入以下2行配置
security:
authorization: enabled
#重啟mongodb服務
[root@mongodb02 ~]# /etc/init.d/mongod restart
#驗證用戶權限
[root@mongodb04 ~]# mongo --host 192.168.1.7
> use wsy
> db.auth("wsy","wushaoyu")
1
5、重置用戶的密碼
#切換到root超級管理員角色
> use admin
switched to db admin
> db.auth("root","root")
1
#重置wsy用戶的密碼
務必切換到wsy庫,否則報錯,在admin庫找不到wsy用戶
> db.changeUserPassword("wsy","WuShaoYu")
2019-03-02T19:01:41.375+0800 E QUERY [js] Error: Updating user failed: User wsy@admin not found :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
DB.prototype.updateUser@src/mongo/shell/db.js:1541:15
DB.prototype.changeUserPassword@src/mongo/shell/db.js:1545:9
@(shell):1:1
> use wsy(
switched to db wsy
> db.changeUserPassword("wsy","WuShaoYu")
>
#測試wsy用戶密碼是否修改成功
> db.auth("wsy","wushaoyu")
Error: Authentication failed.
0
> db.auth("wsy","WuShaoYu")
1
#可看出修改密碼成功
參考文檔:
https://docs.mongodb.com/manual/tutorial/enable-authentication/
https://docs.mongodb.com/manual/core/security-built-in-roles/
