我尝试向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,此代码也能正常工作。
也许有人有类似的问题,知道我需要做什么。
答案 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