mongodb授权登录,经过自己修改后的授权登录方式
mongodb版本為3.4(目前最新),演示的是linux下的mongodb授權認證(關于MongoDB的安裝可以參考:http://blog.csdn.net/tototuzuoquan/article/details/55805811)
開啟MongoDB服務時不添加任何參數時,默認是沒有權限驗證的,登錄的用戶可以對數據庫任意操作而且可以遠程訪問數據庫!
? ?在剛安裝完畢的時候MongoDB都默認有一個admin數據庫,此時admin數據庫是空的,沒有記錄權限相關的信息!當admin.system.users一個用戶都沒有時,即使mongod啟動時添加了--auth參數,如果沒有在admin數據庫中添加用戶,此時不進行任何認證還是可以做任何操作(不管是否是以--auth 參數啟動),直到在admin.system.users中添加了一個用戶。
需要注意的是:admin.system.users中將會保存比在其它數據庫中設置的用戶權限更大的用戶信息,擁有超級權限,也就是說在admin中創建的用戶可以對mongodb中的其他數據庫數據進行操作。
1 mongodb系統中,數據庫是由超級用戶來創建的,一個數據庫可以包含多個用戶,一個用戶只能在一個數據庫下,不同數據庫中的用戶可以同名!
2 當admin.system.users一個用戶都沒有時,即使mongod啟動時添加了--auth參數,如果沒有在admin數據庫中添加用戶,此時不進行任何認證還是可以做任何操作(不管是否是以--auth 參數啟動),直到在admin.system.users中添加了一個用戶。
3 特定數據庫比如DB1下的用戶User1,不能夠訪問其他數據庫DB2,但是可以訪問本數據庫下其他用戶創建的數據!
4 不同數據庫中同名的用戶不能夠登錄其他數據庫!比如DB1,DB2都有user1,以user1登錄DB1后,不能夠登錄到DB2進行數據庫操作!
5 在admin數據庫創建的用戶具有超級權限,可以對mongodb系統內的任何數據庫的數據對象進行操作!
下面通過實驗的方式進程驗證(可能不全面,歡迎大家指正):
1 第一次安裝monogdb時,admin數據庫中沒有任何用戶,此時不管是否以--auth方式啟動數據庫,其他數據庫(比如test數據庫)中的用戶都可以對另外的數據庫(比如db1數據庫)中的數據進行操作~!
a)以默認的方式啟動mongodb
第一次登錄不啟動授權(mongo默認不啟動)
cd /etc/init.d/接著使用 ./mongo 命令連接數據庫
./mongodb start?切換到admin數據庫?use admin
使用創建用戶命令:
use admin
#查看admin 數據庫中的用戶信息
db.system.users.find();
db.createUser({user: "docdetection",pwd: "123456",roles: [ { role: "root", db: "admin" } ]}
)
則對admin數據庫添加了名為docdetection的用戶(注:mongo為每一個數據庫都提供了一套用戶權限)
接著關閉數據庫(注:當啟動了授權認證,只有root角色有權限可以關閉數據庫)
cd /etc/init.d/./mongodb restartdb.shutdownServer();然后Ctrl + C的方式退出客戶端連接第二次登錄啟用授權認證:
cd /usr/local/mongodb./mongo ip:27017接著切換到admin數據庫,使用查看用戶命令
use admin show users結果如下:{ "_id" : "admin.docdetection", "user" : "docdetection", "db" : "admin", "roles" : [ { "role" : "root", "db" : "admin" } ] }將提示未授權
這時需要做授權認證,下面的命令是驗證是否存在對應的用戶
> db.auth("docdetection","123456"); 1 > db.auth("docdettion","123456"); Error: Authentication failed. 0 > 如上所示,如果數值為1表示已經存在了該用戶,否則不存在該用戶可以查詢系統中是否有該用戶了:> db.system.users.find(); { "_id" : "admin.docdetection", "user" : "docdetection", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "sRqUK+Hz0GeUZ++P+s248Q==", "storedKey" : "6AoCmjxxxxxFiwIn7ifSirc=", "serverKey" : "7Mrd4rbGcxcxq7vtbZLb5k=" } }, "roles" : [ { "role" : "root", "db" : "admin" } ] } { "_id" : "docdetection.docdetection", "user" : "docdetection", "db" : "docdetection", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "5yVnFHjtjPedY21RlAP7wg==", "storedKey" : "58rxxphm/HDdUPfxxxxxe4NLlbLTI=", "serverKey" : "J46CYhOVxxxxxxr8bPBzkQZU=" } }, "roles" : [ { "role" : "readWrite", "db" : "docdetection" } ] } >再調用剛才的命令則可以查看到用戶信息
use admin
show users
顯示的結果如下:
{
"_id" : "admin.docdetection",
"user" : "docdetection",
"db" : "admin",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}
接著我們需要為我們的數據庫添加相關用戶,這里使用
docdetection為示例 use docdetection db.createUser({user: "docdetection",pwd: "123456",roles: [{ role: "readWrite", db: "docdetection" }]} )這里為docdetection數據庫添加了具有讀寫權限的角色
總結
以上是生活随笔為你收集整理的mongodb授权登录,经过自己修改后的授权登录方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我想知道去年和前年各大军校的录取分数线,
- 下一篇: 相似度算法(http://blog.si