MongoDB之使用者管理

stonebox1122發表於2017-08-24
在MongoDB裡面預設情況下,只要是進行連線都可以不使用使用者名稱和密碼,因為要想讓其起作用,就必須具備以下兩個條件:
  ● 條件一:伺服器啟動的時候開啟授權認證。
  ● 條件二:需要配置使用者名稱和密碼。
但是需要明確的是,如果要想配置使用者名稱和密碼,一定是針對一個資料庫的,例如現有要建立的是stone資料庫使用者,那麼就必須切換到stone資料庫上。

範例:執行使用者的建立
任何使用者都必須具備一個自己的操作角色:read、readWrite
> use admin
switched to db admin
> db.createUser({
... "user":"root",
... "pwd":"root",
... "roles":[{"role":"root","db":"admin"}]
... })
Successfully added user: {
        "user" : "root",
        "roles" : [
                {
                        "role" : "root",
                        "db" : "admin"
                }
        ]
}

> use hr
switched to db hr
> use hr
switched to db hr
> db.createUser({
... "user":"stone",
... "pwd":"stone",
... "roles":[{"role":"readWrite","db":"hr"}]
... })
Successfully added user: {
        "user" : "stone",
        "roles" : [
                {
                        "role" : "readWrite",
                        "db" : "hr"
                }
        ]
}

那麼現在就表示成功的建立了stone使用者。那麼如果要想讓次使用者名稱起作用,則必須以授權的方式開啟MongoDB服務。修改MongoDB的引數檔案。

範例:修改引數檔案,增加授權啟動
[root@D2-LZY245 ~]# vim /usr/local/mongodb/mongodb.conf
dbpath=/usr/local/mongodb/db
logpath=/usr/local/mongodb/log/mongodb.log
logappend=true
auth=true
port=27017
fork=true

重啟資料庫:
> use admin
switched to db admin
> db.shutdownServer();

[root@D2-LZY245 ~]# mongod -f /usr/local/mongodb/mongodb.conf
about to fork child process, waiting until server is ready for connections.
forked process: 25987
child process started successfully, parent exiting

[root@D2-LZY245 ~]# mongo
MongoDB shell version v3.4.7
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.7
> use stone
switched to db stone
> db.emp.find();
Error: error: {
        "ok" : 0,
        "errmsg" : "not authorized on stone to execute command { find: \"emp\", filter: {} }",
        "code" : 13,
        "codeName" : "Unauthorized"
}

此時增加了一個驗證的啟動模式,發現依然可以在不輸入使用者名稱和密碼的前提下進行登入,並且也可以直接進行資料庫的切換操作。但是在使用資料庫集合的時候出現了錯誤提示。

範例:登入資料庫的時候使用使用者名稱和密碼
[root@D2-LZY245 ~]# mongo -u "stone" -p "stone" --authenticationDatabase "hr"
MongoDB shell version v3.4.7
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.7

或者:

[root@D2-LZY245 ~]# mongo
MongoDB shell version v3.4.7
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.7
> use hr
switched to db hr
> db.auth("stone","stone")
1

此時就表示成功的實現了使用者的登入操作。

範例:修改密碼
[root@D2-LZY245 ~]# mongo -u root -p 'root' --authenticationDatabase 'admin'
> db.changeUserPassword("stone","stone")

範例:檢視使用者及角色
> use admin
switched to db admin
> db.system.users.find();
{ "_id" : "test.stone", "user" : "stone", "db" : "test", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "boSLJ2acqh403AW0MZO7yA==", "storedKey" : "Y7zaryoqOiedeKsVs61SrAMAK8c=", "serverKey" : "+wa0fO2hwNrLRIuVmtJMvR1AJv0=" } }, "roles" : [ { "role" : "readWrite", "db" : "hr" } ] }
{ "_id" : "admin.root", "user" : "root", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "NmiMDfzuCnkO1CRKrVUV9A==", "storedKey" : "rD6NaqsfON8h0YMNv6idPKUpac0=", "serverKey" : "9MXDynhFSNmHEkMIMfxnSKdQPio=" } }, "roles" : [ { "role" : "root", "db" : "admin" } ] }
{ "_id" : "hr.stone", "user" : "stone", "db" : "hr", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "69NLL2oWTg0OehrBwytbsw==", "storedKey" : "LRmPZjHZorxhfWA+RS6SgzLbev4=", "serverKey" : "59xkCl7qKK+HrKrlK5QMdGx94U8=" } }, "roles" : [ { "role" : "readWrite", "db" : "hr" } ] }


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28536251/viewspace-2144109/,如需轉載,請註明出處,否則將追究法律責任。

相關文章