溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mongod user and role management

發(fā)布時間:2020-06-19 15:53:53 來源:網絡 閱讀:585 作者:Meteor_hy 欄目:數據庫

一、用戶驗證

 --auth: mongod啟動項中加入--authmongodb啟動后,就可以完成授權模塊的啟用;

  雖然auth模塊啟用后本機還能否登陸到數據庫,但是不具備增刪改查的權限了,所以啟動auth模塊之前就應該創(chuàng)建一個超級用戶

  --keyFile <file>: 主要用于分片集群與副本集相互之間的授權使用,在單機情況下只要用到auth,如果是在集群(分片+副本集)環(huán)境下,就

必須要用到該參數;

  可以通過配置文件控制,控制語句如下:

   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

    mongdbV3.0版本之后內置了root 角色,也就是結合了 readWriteAnyDatabase、dbAdminAnyDatabase userAdminAnyDatabase、clusterAdmin  4個角色權限,類似于Oraclesysdba角色,但是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

 創(chuàng)建普通用戶:

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:為當前用戶創(chuàng)建、修改用戶和角色。擁有userAdmin權限的用戶可以將該數據庫的任意權限賦予任意的用戶。

     

(3).集群管理權限

  admin數據庫包含了下面的角色,用戶管理整個系統,而非單個數據庫。這些權限包含了復制集和共享集群的管理函數。

  clusterAdmin:提供了最大的集群管理功能。相當于clusterManager, clusterMonitor, and hostManagerdropDatabase的權限組合。

  clusterManager:提供了集群和復制集管理和監(jiān)控操作。擁有該權限的用戶可以操作configlocal數據庫(即分片和復制功能)

  clusterMonitor:僅僅監(jiān)控集群和復制集。

  hostManager:提供了監(jiān)控和管理服務器的權限,包括shutdown節(jié)點,logrotate, repairDatabase等。

  備份恢復權限:admin數據庫中包含了備份恢復數據的角色。包括backup、restore等等。

     

(4).所有數據庫角色

  admin數據庫提供了一個mongod實例中所有數據庫的權限角色:

  readAnyDatabase:具有read每一個數據庫權限。但是不包括應用到集群中的數據庫。

  readWriteAnyDatabase:具有readWrite每一個數據庫權限。但是不包括應用到集群中的數據庫。

  userAdminAnyDatabase:具有userAdmin每一個數據庫權限,但是不包括應用到集群中的數據庫。

  dbAdminAnyDatabase:提供了dbAdmin每一個數據庫權限,但是不包括應用到集群中的數據庫。


(5). 超級管理員權限

  root: dbadminadmin數據庫、useradminadmin數據庫以及UserAdminAnyDatabase。但它不具有備份恢復、直接操作system.*集合的權限,但是擁有root權限的超級用戶可以自己給自己賦予這些權限。


(6). 備份恢復角色:backuprestore;


(7). 內部角色:__system


三、相關命令

 除了 db.createUser() 下面幾個函數也是常用的:

 創(chuàng)建角色: 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(                            創(chuàng)建新用戶

... {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

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI