mongo授权zend shanty

时间:2013-08-03 23:35:53

标签: php mongodb zend-framework

我尝试向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

如果我将用户添加到我的database_test,那么一切正常。

<?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,此代码也能正常工作。

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

2 个答案:

答案 0 :(得分:1)

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

<?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;

答案 1 :(得分: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(auth = true) 2.在admin数据库中创建用户 3.以新用户身份连接 4.在目标数据库中创建用户 在ZF配置中 更新配置文件,如上所述。

有时候我收到错误:致命错误:php_network_getaddresses,我认为这是因为我在使用DNS或php尝试解析地址时遇到了一些麻烦:mongo:// root:pass@127.0.0.1:27017,root:pass@127.0 .0.1:27018,根:pass@127.0.0.1:27019 / database_test