-1

我试图向 mongoDB 添加授权。

我使用 mongodb 2.2.4、php-mongo 1.4.1 stable、a​​pache2、php 5.4、ZendFramework 1.12 + ShantyMongo

我也使用带有 3 个实例的副本集。

当我设置 auth = true mongo create admin 数据库时,当我将用户添加到这个数据库时,我得到了这个错误:

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

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

4

2 回答 2

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;
于 2013-08-05T10:37:47.893 回答
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

我也是这样做的:在 mongo 中:1. 编辑配置文件,启用身份验证(auth = true) 2. 在 admin 数据库中创建用户 3. 以新用户身份连接 4. 在 ZF config 更新配置文件中的目标数据库中创建用户,就像我一样上面描述。

有时我也会收到错误:致命错误:php_network_getaddresses,我认为这是因为我在尝试解析地址时遇到了 DNS 或 php 问题:mongo://root:pass@127.0.0.1:27017,root:pass@127.0.0.1: 27018,root:pass@127.0.0.1:27019/database_test

于 2013-08-05T17:52:26.760 回答