MongoDB: в базе данных mongodb не разрешено выполнять команду GrantRolesToUser() на LIVE-сервере, но отлично работает наPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 MongoDB: в базе данных mongodb не разрешено выполнять команду GrantRolesToUser() на LIVE-сервере, но отлично работает на

Сообщение Anonymous »

1. Сценарий:
У меня есть основная база данных, скажем,portal_mongodb. В портале portal_mongodb у меня есть пользователь портал_mongodba с разрешением роли {'role': 'dbOwner', 'db': портал_mongodb
Мой Настройка env такая: -

Код: Выделить всё

MONGODB_CONNECTION=mongodb
MONGODB_HOST=localhost
MONGODB_PORT=27017
MONGODB_DATABASE=portal_mongodb
MONGODB_USERNAME=portal_mongodba
MONGODB_PASSWORD=portal_password
MONGODB_MASTER_DATABASE=portal_mongodb
Я хочу динамически создавать новую базу данных, но не хочу создавать для нее пользователя. Я хочу предоставить существующему пользователю portal_mongodba новые роли, например: -

Код: Выделить всё

[
{role: 'dbOwner', db: 'new_db'},
{role: 'readWrite', db: 'new_db'},
{role: 'dbAdmin', db: 'new_db'}
]
где new_db — новая динамически создаваемая база данных.
Это мой код на PHP:-

Код: Выделить всё

$connectionString = 'mongodb://' . env('MONGODB_USERNAME') . ':' . env('MONGODB_PASSWORD') . '@' . env('MONGODB_HOST') . ':' . env('MONGODB_PORT') . '/?authSource=' . env('MONGODB_DATABASE');

$client             = new MongoClient($connectionString);   // Connect to MongoDB server
$database           = $client->$databaseName;               // setting new database;
$manager            = new MongoManager($connectionString);  // setting mongodb manager to execute command
$command            = array(
'grantRolesToUser'  => env('MONGODB_USERNAME'),
'roles'             => array(
array(
'role'  => 'dbAdmin',
'db'    => $databaseName
),
array(
'role'  => 'readWrite',
'db'    => $databaseName
),
array(
'role'  => 'dbOwner',
'db'    => $databaseName
)
)
);  // command structure to grant role to existing user
$manager->executeCommand(env('MONGODB_DATABASE'), new MongoCommand($command));  // execute command to grant role
$database->$collectionName->insertOne(array('key' => 'value'));                 // Insert a document into a collection
2. Как я создал базу данных и пользователя на Live-сервере: -
Я создал его через mongoshell. Вот команды:-

Код: Выделить всё

*1. Select admin DB*:-
используйте администратора

Код: Выделить всё

*2. Create a new user under admin DB:-*
db.createUser({user: "portalAdmin", pwd: "portalAdminPassword", roles: [{ role:
"userAdminAnyDatabase", db : "admin"}, {role: "root", db: "admin"}]})

Код: Выделить всё

*3. create a new db:-*
используйте lppportal_mongodb

Код: Выделить всё

*4. Authenticate `portalAdmin` before creating user*
db.auth( "portalAdmin", "portalAdminPassword" )

Код: Выделить всё

*5 create portal user*
db.createUser({user: "portal_mongodba", pwd: "portal_password",
roles: [{ role: "dbOwner", db : "portal_mongodb"}]})

3. Как я создал локальную базу данных: -
Из компаса mongoDB,

Код: Выделить всё

*1. Created database*
используйте портал_mongodb

Код: Выделить всё

*2. Created portal user*
db.createUser({user: "portal_mongodba", pwd: "portal_password", roles:
[{ role: "dbOwner", db : "portal_mongodb"}]})

4. Проблема:
Приведенный выше код отлично работает на локальной машине разработки, но не на сервере. Но этого не должно быть. Настройка локального пользователя и настройка пользователя сервера одинаковы. Вот подробности-
А. Данные LIVE-сервера: -
Структура пользователей MongoDB

Код: Выделить всё

[
{
_id: 'portal_mongodb.portal_mongodba',
userId: UUID('8aa75c1c-e616-403e-a5e9-0bc260abc3b6'),
user: 'portal_mongodba',
db: 'portal_mongodb',
roles: [
{
role: 'dbOwner',
db: 'portal_mongodb'
}
],
mechanisms: [
'SCRAM-SHA-1',
'SCRAM-SHA-256'
]
}
]
данные среды

Код: Выделить всё

MONGODB_CONNECTION=mongodb
MONGODB_HOST=localhost
MONGODB_PORT=27017
MONGODB_DATABASE=portal_mongodb
MONGODB_USERNAME=portal_mongodba
MONGODB_PASSWORD=portal_password
MONGODB_MASTER_DATABASE=portal_mongodb
Б. Данные локального сервера
Структура пользователей MongoDB

Код: Выделить всё

[
{
_id: 'portal_mongodb.portal_mongodba',
userId: UUID('9a95223e-393c-4c40-acca-4e3e46ee98b0'),
user: 'portal_mongodba',
db: 'portal_mongodb',
roles: [
{
role: 'dbOwner',
db: 'portal_mongodb'
}
],
mechanisms: [
'SCRAM-SHA-1',
'SCRAM-SHA-256'
]
}
]
данные среды

Код: Выделить всё

MONGODB_CONNECTION=mongodb
MONGODB_HOST=localhost
MONGODB_PORT=27017
MONGODB_DATABASE=portal_mongodb
MONGODB_USERNAME=portal_mongodba
MONGODB_PASSWORD=portal_password
MONGODB_MASTER_DATABASE=portal_mongodb
По сути, оба файла env и пользовательская структура одинаковы.
5. Сообщение об ошибке:-

Код: Выделить всё

Error Message:- not authorized on portal_mongodb to execute command { grantRolesToUser: "portal_mongodba", roles: [ { role: "dbAdmin", db: "little_buds" }, { role: "readWrite", db: "little_buds" }, { role: "dbOwner", db: "little_buds" } ], $db: "portal_mongodb", lsid: { id: UUID("fd6bb158-f8bb-4eb8-8f45-c79667f66cc2") } }
Как это исправить?

Подробнее здесь: https://stackoverflow.com/questions/786 ... olestouser
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»