1、修改啟動MongoDB時要求用戶驗證加參數 --auth 即可。現在我們把MongoDB服務刪除,再重新添加服務 2、創建用戶,並使用創建的用戶登錄打開shell操作界面,預設test數據,再查看所有資料庫,發現報錯,因為沒有用戶驗證。使用db.auth("user","pwd")進行用戶驗證。 ...
1、修改啟動MongoDB時要求用戶驗證
加參數 --auth 即可。
現在我們把MongoDB服務刪除,再重新添加服務
mongod --dbpath "D:\work\MongoDB\data" --logpath "D:\work\MongoDB\log\mongodb.log" --install --serviceName "MongoDB" --auth
2、創建用戶,並使用創建的用戶登錄
打開shell操作界面,預設test數據,再查看所有資料庫,發現報錯,因為沒有用戶驗證。
使用db.auth("user","pwd")進行用戶驗證。
user:用戶名
pwd:密碼
因為資料庫中沒有用戶,所以需要先使用無用戶驗證的方式啟動數據,在admin資料庫下新建用戶。
db.createUser({user:"", pwd:"", roles:[{role:"", db:""}]})
在當前資料庫下創建一個用戶
user:用戶名
pwd:密碼
roles:角色信息
[role:角色名, db:對指定資料庫的操作]
> db.createUser({user:"admin", pwd:"admin", roles:[{role:"userAdminAnyDatabase", db:"admin"}]}) Successfully added user: { "user" : "admin", "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ] }
在使用用戶驗證的方式啟動資料庫,在資料庫admin中,使用admin登錄
> db.auth("admin","admin")
1
狀態1表示驗證成功,0表示驗證失敗
創建用戶預設給當前使用的數據下創建用戶,
例如:當前使用的數據是admin,在admin數據下新建用戶
db.createUser({user:"zyh", pwd:"zyh", roles:[{role:"readWrite", db:"zyhdb"}]})
在admin資料庫下使用zyh登錄,可讀寫zyhdb的collection。
當在zyhdb下,無法使用zyh登錄,因為用戶zyh是在admin資料庫下。
3、查看當前數據下的用戶
show users 顯示當前資料庫下所有的用戶
使用有用戶管理許可權的用戶登錄才能看見,例如使用zyh登錄後,執行會報錯;使用admin登錄後,顯示用戶
> db.auth("zyh","zyh") 1 > show users 2016-06-01T20:32:30.639+0800 E QUERY [thread1] Error: not authorized on admin to execute command { usersInfo: 1.0 } : _getErrorWithCode@src/mongo/shell/utils.js:25:13 DB.prototype.getUsers@src/mongo/shell/db.js:1523:1 shellHelper.show@src/mongo/shell/utils.js:743:9 shellHelper@src/mongo/shell/utils.js:650:15 @(shellhelp2):1:1 > db.auth("admin","admin") 1 > show users { "_id" : "admin.admin", "user" : "admin", "db" : "admin", "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ] } { "_id" : "admin.zyh", "user" : "zyh", "db" : "admin", "roles" : [ { "role" : "readWrite", "db" : "zyhdb" } ] }
還可以使用db.getUsers()查看所有的用戶
使用db.getUser("user")查詢指定用戶的具體信息
4、修改用戶信息
db.changeUserPassword("user", "newpwd"),修改密碼
user:用戶名
newpwd:新的密碼
db.updateUser("user", {roles:[{role:"", db:""}]})
修改用戶信息
db.grantRolesToUser("user", [{role:"", db:""}])
追加角色
db.revokeRolesFromUser("user", [{role:"", db:""}])
取消角色
5、刪除用戶
db.dropUser("user") 刪除指定用戶
db.dropAllUsers() 刪除當前數據下所有用戶
附:常用內置角色說明
資料庫用戶角色(每個資料庫都有的角色)
read 對non-system集合的讀取許可權,以及以下system集合的讀取許可權:system.indexes,system.js,system.namespaces
readWrite 對non-system集合的讀寫許可權,以及system.js上的讀寫許可權
資料庫管理角色(每個資料庫都包含的數據管理角色)
dbAdmin 完成管理性任務的許可權,比如schema相關任務、索引、統計信息收集。不能用於管理用戶和角色
dbOwner 管理資料庫需要的所有許可權。包含(readWrite、dbAdmin、userAdmin角色的許可權)
userAdmin 在當前資料庫創建和修改角色和用戶的許可權
集群管理角色
admin資料庫包含以下角色用於管理整個系統,而不是只針對單個資料庫
clusterAmin 提供集群管理的最大許可權。包含了clusterManager、clusterMonitor、hostManager角色的許可權
clusterManager 管理和監控集群,可以訪問local和config資料庫。
clusterMonitor 對集群的讀許可權
hostManager 管理和健康servers
備份和還原角色
admin資料庫包含以下角色用於備份和還原數據
backup 備份許可權
restore 還原許可權
all-database roles
admin數據提供以下角色,對所有資料庫都有效。
readAnyDatabase 提供對所有資料庫的讀許可權
readWriteAnyDatabase 提供對所有資料庫的寫許可權
userAdminAnyDatabase 提供對所有資料庫用戶的管理許可權
dbAdminAnyDatabase 對所有資料庫的dbAdmin許可權
超級角色
角色 說明
root 擁有最高許可權
另外角色也可以自定義設置。