2013-08-03 30 views
-1

我試圖給mongoDB添加授權。mongo授權zend棚戶

我使用mongodb的2.2.4,PHP-蒙戈1.4.1穩定,apache2的,PHP 5.4,ZendFramework 1.12 + ShantyMongo

此外,我使用具有3個實例replicaset。

當我設置身份驗證=真蒙戈創建管理數據庫,當我添加用戶到這個數據庫中,我得到這個錯誤:如果我添加用戶到我的database_test所有做工精細

Fatal error: Uncaught exception 'MongoCursorException' with message 'test.server.com:27017: unauthorized db:database_test ns:database_test.options lock type:0 client:127.0.0.1' in /apps/test_app/libs/Shanty/Mongo/Collection.php:3501 

<?php 

/* Configure logging */ 
MongoLog::setModule(MongoLog::ALL); 
MongoLog::setLevel(MongoLog::ALL); 

$m = new MongoClient(); // connect 
$db = $m->selectDB("database_test"); 
$db->authenticate('admin','12345'); 

即使我將用戶添加到admin和database_test中,此代碼也能正常工作。

也許有人有類似的問題,並知道我需要做什麼。

回答

1

首先,你應該使用下面的語法指定認證:

<?php 
$m = new MongoClient("mongodb://admin:[email protected]/database_test"); 
$db = $m->database_test; 

這是一個有點困難,但回答你的問題,因爲「當我添加用戶到這個數據庫」是不是真的描述。爲了得到正確的答案,您需要學習列出您以前用於執行此操作的步驟或代碼的確切

我在考慮您試圖對普通數據庫(database_test)進行驗證,您只需要爲admin數據庫設置用戶/密碼。在這種情況下,你需要權威性的admin數據庫,然後選擇您database_test

<?php 
$m = new MongoClient("mongodb://admin:[email protected]/admin"); 
$db = $m->database_test; 
0

謝謝你的答案,我想通了這一點。 也許這對未來的某個人來說會是一個惡作劇,Shanty-Mongo需要在服務器陣列中使用用戶名,密碼和端口。 這是應該的樣子:

; Shanty Mongo Config 
hosts.0.host = '127.0.0.1' 
hosts.0.port = '27017' 
hosts.0.username = 'root' 
hosts.0.password = 'pass' 
hosts.1.host = '127.0.0.1' 
hosts.1.port = '27018' 
hosts.1.username = 'root' 
hosts.1.password = 'pass' 
hosts.2.host = '127.0.0.1' 
hosts.2.port = '27019' 
hosts.2.username = 'root' 
hosts.2.password = 'pass' 
database = 'database_test' 
replicaSet = true 

而且我做的: 在蒙戈: 1.編輯配置文件,使權威性(AUTH =真) 2.建立用戶管理數據庫 3.連接新用戶 4.在ZF config 更新配置文件中創建目標數據庫 中的用戶,如上所述。

還有些時候,我得到錯誤:致命錯誤:php_network_getaddresses,我想這是因爲我有一些麻煩DNS或php試圖解析地址:蒙戈://根:[email protected]:27017,根:通過@ 127.0.0.1:27018,root:[email protected]:27019/database_test