У меня есть основная база данных, скажем,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
Код: Выделить всё
[
{role: 'dbOwner', db: 'new_db'},
{role: 'readWrite', db: 'new_db'},
{role: 'dbAdmin', 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
Я создал его через mongoshell. Вот команды:-
Код: Выделить всё
*1. Select admin DB*:-
Код: Выделить всё
*2. Create a new user under admin DB:-*
"userAdminAnyDatabase", db : "admin"}, {role: "root", db: "admin"}]})
Код: Выделить всё
*3. create a new db:-*
Код: Выделить всё
*4. Authenticate `portalAdmin` before creating user*
Код: Выделить всё
*5 create portal user*
roles: [{ role: "dbOwner", db : "portal_mongodb"}]})
3. Как я создал локальную базу данных: -
Из компаса mongoDB,
Код: Выделить всё
*1. Created database*
Код: Выделить всё
*2. Created portal user*
[{ 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
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