您好,登錄后才能下訂單哦!
一、用戶驗證
--auth: 在mongod啟動項中加入--auth,mongodb啟動后,就可以完成授權模塊的啟用;
雖然auth模塊啟用后本機還能否登陸到數據庫,但是不具備增刪改查的權限了,所以啟動auth模塊之前就應該創建一個超級用戶
--keyFile <file>: 主要用于分片集群與副本集相互之間的授權使用,在單機情況下只要用到auth,如果是在集群(分片+副本集)環境下,就
必須要用到該參數;
可以通過配置文件控制,控制語句如下:
security.authorization: 功能更auth完全相同。在MongoDB 2.6版本開始,mongod/mongos的啟動配置文件增加了YAML格式的寫法,例:
security: authorization: enabled
security.keyFile: 功能與--keyFile相同。在MongoDB 2.6版本開始,mongod/mongos的啟動配置文件增加了YAML格式的寫法,例:
security: keyFile: /srv/mongodb/keyfile
mongdb在V3.0版本之后內置了root 角色,也就是結合了 readWriteAnyDatabase、dbAdminAnyDatabase 、 userAdminAnyDatabase、clusterAdmin 4個角色權限,類似于Oracle的sysdba角色,但是MongoDB的超級管理員用戶名稱是可以隨便定義的:
> use admin switched to db admin > db.createUser( ... { ... user: "ljaiadmin", ... pwd: "123456", ... roles: [ { role: "root", db: "admin" } ] ... } ... )
重啟完mongod進程后,接下來做一下權限的驗證:
> use admin switched to db admin > db.auth('ljaiadmin','123456') (注:切換到admin用戶進行授權驗證) 1 > show dbs > use admin switched to db admin > show users
創建普通用戶:
use reporting db.createUser( { user: "reportsUser", pwd: "12345678", roles: [ { role: "read", db: "reporting" }, { role: "read", db: "products" }, { role: "read", db: "sales" }, { role: "readWrite", db: "accounts" } ] } )
二、角色
(1).數據庫用戶角色
針對每一個數據庫進行控制。
read :提供了讀取所有非系統集合,以及系統集合中的system.indexes, system.js, system.namespaces
readWrite: 包含了所有read權限,以及修改所有非系統集合的和系統集合中的system.js的權限.
(2).數據庫管理角色
每一個數據庫包含了下面的數據庫管理角色。
dbOwner:該數據庫的所有者,具有該數據庫的全部權限。
dbAdmin:一些數據庫對象的管理操作,但是沒有數據庫的讀寫權限。(參考:http://docs.mongodb.org/manual/reference/built-in-roles/#dbAdmin)
userAdmin:為當前用戶創建、修改用戶和角色。擁有userAdmin權限的用戶可以將該數據庫的任意權限賦予任意的用戶。
(3).集群管理權限
admin數據庫包含了下面的角色,用戶管理整個系統,而非單個數據庫。這些權限包含了復制集和共享集群的管理函數。
clusterAdmin:提供了最大的集群管理功能。相當于clusterManager, clusterMonitor, and hostManager和dropDatabase的權限組合。
clusterManager:提供了集群和復制集管理和監控操作。擁有該權限的用戶可以操作config和local數據庫(即分片和復制功能)
clusterMonitor:僅僅監控集群和復制集。
hostManager:提供了監控和管理服務器的權限,包括shutdown節點,logrotate, repairDatabase等。
備份恢復權限:admin數據庫中包含了備份恢復數據的角色。包括backup、restore等等。
(4).所有數據庫角色
admin數據庫提供了一個mongod實例中所有數據庫的權限角色:
readAnyDatabase:具有read每一個數據庫權限。但是不包括應用到集群中的數據庫。
readWriteAnyDatabase:具有readWrite每一個數據庫權限。但是不包括應用到集群中的數據庫。
userAdminAnyDatabase:具有userAdmin每一個數據庫權限,但是不包括應用到集群中的數據庫。
dbAdminAnyDatabase:提供了dbAdmin每一個數據庫權限,但是不包括應用到集群中的數據庫。
(5). 超級管理員權限
root: dbadmin到admin數據庫、useradmin到admin數據庫以及UserAdminAnyDatabase。但它不具有備份恢復、直接操作system.*集合的權限,但是擁有root權限的超級用戶可以自己給自己賦予這些權限。
(6). 備份恢復角色:backup、restore;
(7). 內部角色:__system
三、相關命令
除了 db.createUser() , 下面幾個函數也是常用的:
創建角色: db.createRole()
更新角色:db.updateRole()
刪除角色:db.dropRole()
獲得某個角色信息: db.getRole()
更改密碼:db.changeUserPassword("userName","newPwd")
獲得“當前數據庫”的所有用戶權限信息:db.getUsers()
獲得“某個指定用戶”的權限信息:db.getUser("userName")
例:
> use company switched to db company > db.createUser( ... {user:"user01",pwd:"123", ... roles:[{"role":"readWrite",db:"company"}] ... }) Successfully added user: { "user" : "user01", "roles" : [ { "role" : "readWrite", "db" : "company" } ] } > db.getUsers() #查看當前DB的users .............. > db.auth("user01","123") 1 > db.changeUserPassword("user01","456") #更改用戶密碼 > db.auth("user01","456") 1 >
刪除用戶:db.dropUser()
例:
> use company switched to db company > db.dropUser("user01") #刪除當前庫的user true >
刪除所有用戶: db.dropAllUsers()
將指定角色賦予給用戶:
db.grantRolesToUser("userName",[ {"role":"roleName1","db":"dbName"},{"role":"roleName2","db":"dbName"}... ])
撤銷某個用戶的某個角色權限:
db.revokeRolesFromUser("userName",[ {"role":"roleName1","db":"dbName"},{"role":"roleName2","db":"dbName"}... ])
四、實例:
[root@meteor ~]# service mongod start
Starting mongod: [確定]
[root@meteor ~]# mongo localhost:27027
MongoDB shell version: 3.2.8
connecting to: localhost:27027/test
Server has startup warnings:
> use admin
switched to db admin
> db.createUser(
... {user:"admin",pwd:"123456",
... roles:[{role:"root",db:"admin"}]
... })
Successfully added user: {
"user" : "admin",
"roles" : [
{
"role" : "root",
"db" : "admin"
} ] }
> use person
switched to db person
> db.p1.insert({name:"thompson",gender:"male",age:"24"})
WriteResult({ "nInserted" : 1 })
> db.p1.find()
{ "_id" : ObjectId("57a2a28aa6d4803a1c952529"), "name" : "thompson", "gender" : "male", "age" : "24" }
> exit
bye
[root@meteor ~]# mongo localhost:27027
MongoDB shell version: 3.2.8
connecting to: localhost:27027/test
> show dbs;
admin 0.000GB
local 0.000GB
person 0.000GB
> exit
bye
[root@meteor ~]# vim /etc/mongod.conf
[root@meteor ~]# sed -n '32,33p' /etc/mongod.conf 需要開啟認證功能
security:
authorization: enabled
[root@meteor ~]# service mongod restart 修改完配置文件后必須重新啟動才能生效
Stopping mongod: [確定]
Starting mongod: [確定]
[root@meteor ~]# mongo localhost:27027
MongoDB shell version: 3.2.8
connecting to: localhost:27027/test
> show dbs 如果未認證,系統提示錯誤
2016-08-04T10:06:08.491+0800 E QUERY [thread1] Error: listDatabases failed:{
"ok" : 0,
"errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }",
"code" : 13
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:62:1
shellHelper.show@src/mongo/shell/utils.js:761:19
shellHelper@src/mongo/shell/utils.js:651:15
@(shellhelp2):1:1
> use admin
switched to db admin
> db.auth("admin","123456") 認證
1
> use person
switched to db person
> db.createUser( 創建新用戶
... {user:"person",pwd:"123",
... roles:[{role:"readWrite",db:"person"}]
... })
Successfully added user: {
"user" : "person",
"roles" : [
{
"role" : "readWrite",
"db" : "person"
} ] }
> use admin
switched to db admin
> db.system.users.find()
{ "_id" : "admin.admin", "user" : "admin", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "KFiaKAkrDqCJ/H8uIIhwzA==", "storedKey" : "faWxuPj1hZ4jV3VhL9Z0zylBL0Y=", "serverKey" : "qYSi5BRZY/GPTuBeF60KCvB5dqg=" } }, "roles" : [ { "role" : "root", "db" : "admin" } ] }
{ "_id" : "person.person", "user" : "person", "db" : "person", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "0tRiioYKdcx+On3uXgR/Sw==", "storedKey" : "8M69xFSgqniSeU7uvLqpzaclECs=", "serverKey" : "Znu2x5fAzMgrMKlxpj2I//1lcWc=" } }, "roles" : [ { "role" : "readWrite", "db" : "person" } ] }
> use person
switched to db person
> db.grantRolesToUser("person",[{role:"dbAdmin",db:"person"}]) 為用戶附加其它角色
> use admin
switched to db admin
> db.system.users.find()
{ "_id" : "admin.admin", "user" : "admin", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "KFiaKAkrDqCJ/H8uIIhwzA==", "storedKey" : "faWxuPj1hZ4jV3VhL9Z0zylBL0Y=", "serverKey" : "qYSi5BRZY/GPTuBeF60KCvB5dqg=" } }, "roles" : [ { "role" : "root", "db" : "admin" } ] }
{ "_id" : "person.person", "user" : "person", "db" : "person", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "0tRiioYKdcx+On3uXgR/Sw==", "storedKey" : "8M69xFSgqniSeU7uvLqpzaclECs=", "serverKey" : "Znu2x5fAzMgrMKlxpj2I//1lcWc=" } }, "roles" : [ { "role" : "dbAdmin", "db" : "person" }, { "role" : "readWrite", "db" : "person" } ] }
> use person
switched to db person
> db.revokeRolesFromUser("person",[{role:"dbAdmin",db:"person"}]) 用戶角色回收
> use admin
switched to db admin
> db.system.users.find()
{ "_id" : "admin.admin", "user" : "admin", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "KFiaKAkrDqCJ/H8uIIhwzA==", "storedKey" : "faWxuPj1hZ4jV3VhL9Z0zylBL0Y=", "serverKey" : "qYSi5BRZY/GPTuBeF60KCvB5dqg=" } }, "roles" : [ { "role" : "root", "db" : "admin" } ] }
{ "_id" : "person.person", "user" : "person", "db" : "person", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "0tRiioYKdcx+On3uXgR/Sw==", "storedKey" : "8M69xFSgqniSeU7uvLqpzaclECs=", "serverKey" : "Znu2x5fAzMgrMKlxpj2I//1lcWc=" } }, "roles" : [ { "role" : "readWrite", "db" : "person" } ] }
> exit
參考:https://docs.mongodb.com/manual/tutorial/create-users/
https://docs.mongodb.com/manual/reference/configuration-options/#security.authorization
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。