蒙戈授权zend shanty


mongo authorization zend shanty

我试图向mongoDB添加授权。

我使用mongodb 2.2.4,php mongo 1.4.1 stable,apache2,php 5.4,ZendFramework 1.12+ShantyMongo

此外,我使用了带有3个实例的replicaset。

当我设置auth=true mongo创建管理数据库时,当我将用户添加到此数据库时,我得到了以下错误:

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中,这段代码也能很好地工作。

也许有人有类似的问题,知道我需要做什么。

首先,您应该使用以下语法来指定身份验证:

<?php
$m = new MongoClient("mongodb://admin:12345@localhost/database_test");
$db = $m->database_test;

不过,回答您的问题有点困难,因为"当我将用户添加到此数据库时"并不是真正的描述性。为了得到正确的答案,您需要学会列出用于执行此操作的确切步骤或代码。

我认为您正试图对普通数据库(database_test)进行身份验证,在该数据库中,您将只为admin数据库设置一个用户/通行证。在这种情况下,您需要对admin数据库进行身份验证,然后选择您的database_test:

<?php
$m = new MongoClient("mongodb://admin:12345@localhost/admin");
$db = $m->database_test;

谢谢你的回答,我明白了。也许这对未来的某个人来说会很有用,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

还有我的工作:在mongo:1.编辑配置文件,启用auth(auth=true)2.在管理数据库中创建用户3.以新用户身份连接4.在目标数据库中创建用户在ZF配置中更新配置文件,如上所述。

还有一些时候我会遇到错误:致命错误:php_network_getaddresses,我想这是因为我在DNS或php解析地址时遇到了一些问题:mongo://root:pass@127.0.0.1:27017,根:pass@127.0.0.1:27018,根:pass@127.0.0.1:27019/database_test