MongoDB建立資料庫管理員賬號
啟動MongoDB服務時,在沒有指定--auth引數情況下,不需要任何驗證就可以對資料庫進行任意操作。為了安全,一般需要為資料庫建立相應的角色,為角色分配相應的許可權,在啟動MongoDB時指定--auth引數。
啟動MongoDB服務,進入MongoDB Shell控制檯,切換至admin資料庫,建立資料庫管理員使用者,其指令如下(以#開頭的為註釋說明,非輸入控制檯內容,每條指令以Enter鍵結束):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# 切換至admin資料庫。
# 也可以使用db = db.getSiblingDB('admin')代替use admin。 use admin
# 建立管理員使用者,並指定其許可權。
db.addUser({
user :
'root' ,
pwd
: '123456' ,
roles : [
'clusterAdmin' ,
'dbAdminAnyDatabase' ,
'userAdminAnyDatabase' ,
'readWriteAnyDatabase'
]
})
|
關閉MongoDB服務,重啟MongoDB服務並加上--auth引數,進入MongoDB Shell控制檯,切換至admin資料庫,敲入show collections指令,此時系統報錯:error : {"$err" : "not authorized for query on admin.system.namespaces", "code" : 16550}。這是需要認證的緣故,在控制檯輸入如下指令進行認證:
1 2 3 |
# 進行使用者認證,輸入上面建立的使用者名稱及密碼。
# 也可以使用db.auth('root', '123456')代替下面指令。
db.auth({user :
'root' , pwd
: '123456' })
|
認證通過後,重新敲入show collection指令,此時不再報錯,可以看到指令相應的輸出結果。
接下來,為指定資料庫建立一般使用者角色,用於程式讀取、修改資料庫。假如現有blog資料庫,要為其建立使用者名稱為admin、密碼為123456,擁有CRUD(增查改刪)許可權,指令如下:
1 2 3 4 5 6 7 8 9 |
# 切換至blog資料庫。
use blog
# 建立admin使用者。
db.addUser({
user :
'admin' ,
pwd
: '123456' ,
roles : [ 'readWrite' ]
})
|
PHP連線至blog資料庫程式碼示例(PHP必須安裝MongoDB擴充套件,若想了解PHP如何安裝MongoDB擴充套件,請參閱:PHP使用MongoDB擴充套件):
1 2 3 4 5 6 7 |
<?php
$mongo
= new MongoClient( 'mongodb://admin:[email protected]:27017/blog' );
/**
* 其他程式碼。
*/
?>
|
說明:不同MongoDB版本在建立資料庫使用者角色會存在細微的差別,本文使用的是MongoDB 2.4.4版本。若想了解更多MongoDB使用者許可權,請參閱MongoDB官方手冊:User Privilege Roles in MongoDB。