Mongodb之權限認證管理
阿新 • • 發佈:2018-03-02
nosql mongodb 權限認證 Mongodb默認是不開啟認證的,對於數據庫來說,這有很大的安全隱患,下面記錄下生產中Mongodb權限認證的方法。
一,環境
阿裏雲:CentOS Linux release 7.4.1708 (Core)
Mongodb版本: 3.6.2
二,添加超級用戶
Mongodb的權限認證是基於數據庫的,要想創建普通用戶,必須要通過管理員來操作。
> use admin > db.createUser( { user: "root", pwd: "123456", roles: [ { role: "root", db: "admin" } ] } ) #結果如下 Successfully added user: { "user" : "root", "roles" : [ { "role" : "root", "db" : "admin" } ] }
查看用戶
> show users
{
"_id" : "admin.root",
"user" : "root",
"db" : "admin",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}
三,添加普通用戶
> db.createUser( { user: "test", pwd: "123456", roles: [ { role: "readWrite", db: "test" }], } ) #執行結果 Successfully added user: { "user" : "test", "roles" : [ { "role" : "readWrite", "db" : "test" },] }
四,配置Mongodb開啟驗證
兩種方式,一種是mongodb啟動時加入--auth參數,另一種是修改配置文件。這裏采用修改配置文件的方式。
vi mongo.conf
logpath=/mnt/mongodb/logs/mongodb.log
logappend=false
dbpath=/mnt/mongodb/data/db
fork=true
# Enable the HTTP interface (Defaults to port 28017).
#httpinterface=true
bind_ip=192.168.1.54
port=27017
auth=true #添加auth配置
重啟mongodb:
ps -ef | grep -v grep | grep mongo | awk ‘{print $2}‘ | xargs kill -HUP
mongod -f /opt/mongodb/etc/mongo.conf
這時再用默認方式登錄Mongodb:
mongo
MongoDB shell version v3.6.2
connecting to: mongodb://192.168.1.54:27017/test
MongoDB server version: 3.6.2
> show dbs
2018-03-02T11:55:38.884+0800 E QUERY [thread1] Error: listDatabases failed:{
"ok" : 0,
"errmsg" : "not authorized on admin to execute command { listDatabases: 1.0, $db: \"admin\" }",
"code" : 13,
"codeName" : "Unauthorized"
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:65:1
shellHelper.show@src/mongo/shell/utils.js:813:19
shellHelper@src/mongo/shell/utils.js:703:15
@(shellhelp2):1:1
>
會提示沒有權限操作。這時需要auth方法去認證。
> use admin
switched to db admin
> db.auth(‘root‘, ‘123456‘)
1
返回1說明認證通過。同理,認證test則需要進入test數據庫中,再執行auth方法
> use test
switched to db test
> db.auth(‘test‘, ‘123456‘)
1
當然也可以在mongo客戶端連接時指定用戶名密碼,如下:
mongo -u test -p 123456 --authenticationDatabase test
參數比較簡單,這裏就不做說明了。
最後,介紹下Mongodb中角色的定義:
角色說明:
read:允許用戶讀取指定數據庫
readWrite:允許用戶讀寫指定數據庫
dbAdmin:允許用戶在指定數據庫中執行管理函數,如索引創建、刪除,查看統計或訪問system.profile
userAdmin:允許用戶向system.users集合寫入,可以找指定數據庫裏創建、刪除和管理用戶
clusterAdmin:只在admin數據庫中可用,賦予用戶所有分片和復制集相關函數的管理權限。
readAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的讀權限
readWriteAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的讀寫權限
userAdminAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的userAdmin權限
dbAdminAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的dbAdmin權限。
root:只在admin數據庫中可用。超級賬號,超級權限
Mongodb官方關於角色的定義:https://docs.mongodb.com/manual/core/security-built-in-roles/
Mongodb之權限認證管理