Mongodb默認是不開啓認證的,對於數據庫來講,這有很大的安全隱患,下面記錄下生產中Mongodb權限認證的方法。mongodb
阿里雲:CentOS Linux release 7.4.1708 (Core)
Mongodb版本: 3.6.2shell
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" } ] }
> user db1 # 爲db1庫建立用戶 > db.createUser( { user: "test", pwd: "123456", roles: [ { role: "readWrite", db: "test" }], } ) #執行結果 Successfully added user: { "user" : "test", "roles" : [ { "role" : "readWrite", "db" : "test" },] }
兩種方式,一種是mongodb啓動時加入--auth參數,另外一種是修改配置文件。這裏採用修改配置文件的方式。
vi mongo.confapp
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:ide
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方法去認證。ui
> 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客戶端鏈接時指定用戶名密碼,以下:prototype
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/