MongoDB權(quán)限訪問控制

centos7下安裝3.2.6版本的MongoDB參考此篇文章

上述過程安裝下的mongodb,在命令窗口中默認是超級用戶,什么權(quán)限都有,這顯然不是我們需要的。

在3.0版本以后是不存在admin數(shù)據(jù)庫的,所以新建一個admin數(shù)據(jù)庫,并添加一個角色

use admin

db.createUser(

? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ?user: "admin",

? ? ? ? ? ? ? ? ? ? ?customData:{description:"superuser"}, ?--描述,非必需

? ? ? ? ? ? ? ? ? ? ?pwd: "admin",

? ? ? ? ? ? ? ? ? ? ?roles: [{role:"userAdminAnyDatabase",db:"admin"}]

? ? ? ? ? ? ? ? ? ? ?--注意這兩個參數(shù),稍后再解釋

? ? ? ? ? }

)

可以通過指令查看添加的用戶:

show users


db.system.users.find()

備注:可以使用操作系統(tǒng)的 kill 命令,給 mongod 進程發(fā)送 SIGINT 或 SIGTERM 信號,即 "kill -2 PID," 或者 “kill -15 PID“。建議不要使用 ”kill -9 pid“,因為如果 MongoDB 運行在沒開啟日志(--journal)的情況下,可能會造成數(shù)據(jù)損失。

怎么關(guān)閉?mongoDB?

1、關(guān)閉 MongoDB 服務 ?use admin ? ?db.shutdownServer()

2、kill ?-2 ? ?pid

3、kill ?-15 ?pid

關(guān)閉mongoDB之后

修改配置文件/usr/local/mongodb/bin/mongodb.conf,增加一行auth = true,在重新啟動服務

啟動服務時增加參數(shù) --auth

/usr/local/mongodb/bin/mongod ?--auth ?--f /usr/local/mongodb/bin/mongodb.conf

再次進入mongodb 的 shell,此時你操作mongodb比如show dbs 報錯如下

show dbs

2017-02-08T00:18:30.680+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:760:19

shellHelper@src/mongo/shell/utils.js:650:15

@(shellhelp2):1:1

正確操作

use admin

db.auth("admin","admin")?#認證,返回1表示成功

/usr/local/mongodb/bin/mongo -u admin -p admin --authenticationDatabase admin

備注:admin(authenticationDatabase) 只有用戶管理的權(quán)限,沒有其他權(quán)限,下面創(chuàng)建用戶,用戶綁定數(shù)據(jù)庫,即在那個數(shù)據(jù)庫下創(chuàng)建的用戶就要在那個數(shù)據(jù)庫下認證

use demo

db.createUser(

? ? ? ?{

? ? ? ? ? ? ? user:"ybl",

? ? ? ? ? ? ? customData:{description:"test user_1"},

? ? ? ? ? ? ? pwd:"926055",

? ? ? ? ? ? ? roles:[{"role":"readWrite","db":"demo"}]

? ? ? ?}

)

db.createUser(

? ? ? {

? ? ? ? ? ? ? user:"hqw",

? ? ? ? ? ? ? customData:{description:"test user_2"},

? ? ? ? ? ? ? pwd:"940331",

? ? ? ? ? ? ? roles:[{"role":"read","db":"demo"}]

? ? ? }

)

可自行驗證

use? admin? ? db.auth("admin","admin") ? ?- - 用戶管理

use? demo ? ? db.auth("ybl","926055") ? ? ? - - 讀寫

use ?demo ? ? db.auth("hqw","940331") ? ? - - 只讀

名詞解釋:

Read:允許用戶讀取指定數(shù)據(jù)庫

readWrite:允許用戶讀寫指定數(shù)據(jù)庫

dbAdmin:允許用戶在指定數(shù)據(jù)庫中執(zhí)行管理函數(shù),如索引創(chuàng)建、刪除,查看統(tǒng)計或訪問system.profile

userAdmin:允許用戶向system.users集合寫入,可以找指定數(shù)據(jù)庫里創(chuàng)建、刪除和管理用戶

clusterAdmin:只在admin數(shù)據(jù)庫中可用,賦予用戶所有分片和復制集相關(guān)函數(shù)的管理權(quán)限。

readAnyDatabase:只在admin數(shù)據(jù)庫中可用,賦予用戶所有數(shù)據(jù)庫的讀權(quán)限

readWriteAnyDatabase:只在admin數(shù)據(jù)庫中可用,賦予用戶所有數(shù)據(jù)庫的讀寫權(quán)限

userAdminAnyDatabase:只在admin數(shù)據(jù)庫中可用,賦予用戶所有數(shù)據(jù)庫的userAdmin權(quán)限

dbAdminAnyDatabase:只在admin數(shù)據(jù)庫中可用,賦予用戶所有數(shù)據(jù)庫的dbAdmin權(quán)限。

root:只在admin數(shù)據(jù)庫中可用。超級賬號,超級權(quán)限

roles:指定用戶的角色,可以用一個空數(shù)組給新用戶設定空角色;在roles字段,可以指定內(nèi)置角色和用戶定義的角色。role里的角色可以選:

Built-In Roles(內(nèi)置角色):

1. 數(shù)據(jù)庫用戶角色:read、readWrite;

2. 數(shù)據(jù)庫管理角色:dbAdmin、dbOwner、userAdmin;

3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;

4. 備份恢復角色:backup、restore;

5. 所有數(shù)據(jù)庫角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase

6. 超級用戶角色:root

// 這里還有幾個角色間接或直接提供了系統(tǒng)超級用戶的訪問(dbOwner 、userAdmin、userAdminAnyDatabase)

7. 內(nèi)部角色:__system

更多信息比如

修改密碼、修改密碼和用戶信息等

可參考 http://www.cnblogs.com/wingjay/p/3954430.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容