Dmitry
это вы не правы
нет, ты не прав. Пруфы выше, с командами и выводом от них
yopp
вы путаете хранилище пользователей и скоупы
yopp
Заходим в базу тест, убеждаемся что там пользователся нет: > use test switched to db test > db.getUs
yopp
вот тут вы и ошибаетесь
yopp
вам необходимо создавать пользователей в admin базе, давая им роли на другие базы
Dmitry
вот тут вы и ошибаетесь
В чем ошибка? В базе test, нет ни одного пользователся
yopp
admin база используется как хранилище для аутентификации по-умолчанию
Dmitry
вам необходимо создавать пользователей в admin базе, давая им роли на другие базы
выше как раз пример того, как я создал пользователя в базе admin, с доступом в базу test
yopp
потому что у вас наверняка authDb не выставлен
yopp
а значит у вас хранилище по-умолчанию admin
Dmitry
да, и там их и не должно быть
можно пользователя в базе test создать
yopp
Да, можно, но это не то что вы имеете ввиду
Dmitry
а значит у вас хранилище по-умолчанию admin
в запросе хранилище явно указывается: mongo --norc -utest -ptest --authenticationDatabase admin --eval 'db.getCollectionNames()' test authenticationDatabase - выбор базы для ауетантификации test в конце - база в которой запрос делается
yopp
Это работет не так
yopp
Это не ваша вина, я уже написал что в монге с правами бардак
yopp
Но вы неверно понимаете как это работает. Вам необходимо деражть список _всех_ пользователей и их ролей в admin, вне зависимости от того на каую базу вы хотите выставить права
yopp
по этому там отдельно есть поле db: которое задаёт _скоуп_ прав
Dmitry
Но вы неверно понимаете как это работает. Вам необходимо деражть список _всех_ пользователей и их ролей в admin, вне зависимости от того на каую базу вы хотите выставить права
без разницы как я понимаю. Ты не прав. Можно создать пользователя в базе admin, с доступом в базу test Можно создать пользователся в базе test, с доступом в базу test
Dmitry
И я это докозал выше
yopp
¯\_(ツ)_/¯
yopp
Можно создать пользователся в базе test, с доступом в базу test и если у вас Authdb != test, то права не будут работать
Dmitry
потому что dbAdmin _не даёт_ права на local и config
Еще раз, нельзя создать пользователя в базе local. Нельзя создать пользователя, который будет иметь права в базу local. Я могу еще. раз команды и их вывод привести
yopp
вам и не надо создавать его в local
yopp
третий раз повтораяю
Dmitry
yopp
вы неверно понимаете как работает хранилище привилегий в монге
Dmitry
вам и не надо создавать его в local
я там его и не создаю. Я создаю его в admin
Dmitry
И это не работает
Dmitry
в этом и проблема
yopp
> use local switched to db local > db.createUser({ user: "root", pwd: "pass", roles: [{role: "root", db: "local"}]})
yopp
это неверная настройка
yopp
use admin; db.createUser({ user: "root", pwd: "pass", roles: [{role: "root", db: "local"}]})
Dmitry
use admin; db.createUser({ user: "root", pwd: "pass", roles: [{role: "root", db: "local"}]})
Еще раз: > use admin switched to db admin > db.createUser({ user: "test_local", pwd: "test", roles: [{role: "root", db: "local"}]}) 2020-04-29T15:04:49.969+0200 E QUERY [thread1] Error: couldn't add user: No role named root@local : _getErrorWithCode@src/mongo/shell/utils.js:25:13 DB.prototype.createUser@src/mongo/shell/db.js:1437:15 @(shell):1:1 > у базы local, нету роли "root"
yopp
MongoDB provides all other built-in roles only on the admin database. Значит вам необходимо вместо роли указать привилегию
yopp
https://docs.mongodb.com/manual/reference/privilege-actions/
Dmitry
MongoDB provides all other built-in roles only on the admin database. Значит вам необходимо вместо роли указать привилегию
нельзя указывать вместо роли привелегию. Можно создать роль с нужными тебе привелегеиями, но создавать роль в local нельзя
yopp
у меня сейчас нет монги под рукой, значит вам не в local надо создать роль, а в admin, с resouce scope на local
Dmitry
MongoDB provides all other built-in roles only on the admin database. Значит вам необходимо вместо роли указать привилегию
Создать роль в local нельзя > use local switched to db local > db.createRole({role:"custom",privileges: [ {resource: {db:"local",collection:"system.replset"}, actions: ["remove"] }], roles: []}) 2020-04-29T15:08:36.079+0200 E QUERY [thread1] Error: Cannot create roles in the local database : _getErrorWithCode@src/mongo/shell/utils.js:25:13 DB.prototype.createRole@src/mongo/shell/db.js:1702:1 @(shell):1:1 Нет смысла создавать ее в admin > use admin switched to db admin > db.createRole({role:"custom",privileges: [ {resource: {db:"local",collection:"system.replset"}, actions: ["remove"] }], roles: []}) { "role" : "custom", "privileges" : [ { "resource" : { "db" : "local", "collection" : "system.replset" }, "actions" : [ "remove" ] } ], "roles" : [ ] } Так как все равно нельзя на нее сослаться, делая юзера для базы local > db.createUser({ user: "test_local", pwd: "test", roles: [{role: "custom", db: "local"}]}) 2020-04-29T15:10:03.095+0200 E QUERY [thread1] Error: couldn't add user: No role named custom@local : _getErrorWithCode@src/mongo/shell/utils.js:25:13 DB.prototype.createUser@src/mongo/shell/db.js:1437:15 @(shell):1:1
yopp
возможно прокатит сделать роль local_root где указать roles: [ root, db: local ]
yopp
> use local switched to db local
yopp
забудьте вы вообще про это
yopp
у вас все действия должны быть в admin
yopp
это дебильная система в монге
Dmitry
> use local switched to db local
прочитай внимательней. Я для примера попробовал создать роли как и в local, так и в admin А потом попробовал в базе admin создать пользователя с этой ролью для доступа к базе local
Dmitry
И оба варианта НЕ работают
yopp
первый и не должен работать
yopp
со вторым интересно
yopp
какая версия?
yopp
попробуйте сделать anyAction, anyResource и дать это руту
Dmitry
у вас все действия должны быть в admin
во первых, насчет этого будем дискутировать позже, так как ты не прав. А во вторых внимательней прочитайте. Я создал роль в базе admin, но для примера и дебага попробоввал и в базе local
yopp
давайте вы хамить не будете
Dmitry
давайте вы хамить не будете
А где я хамил? Если мои слова воспринимаются как хамство, я прошу прощения.
yopp
When adding a user, you create the user in a specific database. This database is the authentication database for the user.
yopp
The following roles are available on the admin database and provide privileges which apply to all databases except local and config:
Dmitry
попробуйте сделать anyAction, anyResource и дать это руту
Действия anyResource нет. Не имеет значения какую роль делать в admin. Нельзя создать пользоваля для доступа к local, роли которой нет в local: > db.createRole({role:"custom",privileges: [ {resource: {db:"local",collection:"system.replset"}, actions: ["anyAction"] }], roles: []}) { "role" : "custom", "privileges" : [ { "resource" : { "db" : "local", "collection" : "system.replset" }, "actions" : [ "anyAction" ] } ], "roles" : [ ] } > db.createUser({ user: "test_local", pwd: "test", roles: [{role: "custom", db: "local"}]}) 2020-04-29T15:17:19.448+0200 E QUERY [thread1] Error: couldn't add user: No role named custom@local : _getErrorWithCode@src/mongo/shell/utils.js:25:13 DB.prototype.createUser@src/mongo/shell/db.js:1437:15 @(shell):1:1
yopp
-> db:"local",collection:"system.replset"
yopp
resouce: «anyResource»
yopp
и роль дать root
yopp
в db.admin
yopp
без указания скоупа
Dmitry
resouce: «anyResource»
нет ресурса anyResource. Там либо { cluster : true }, либо {db:"", collection:""} (если db или collection пусты, это означает для всех баз или коллекций)
yopp
The syntax for this resource is { anyResource: true }.
Dmitry
The syntax for this resource is { anyResource: true }.
Нет такого: https://docs.mongodb.com/manual/reference/system-roles-collection/#admin.system.roles.privileges > db.dropRole("custom") true > db.createRole({role:"custom",privileges: [ {resource: {cluster:true}, actions: ["anyAction"] }], roles: []}) { "role" : "custom", "privileges" : [ { "resource" : { "cluster" : true }, "actions" : [ "anyAction" ] } ], "roles" : [ ] } > db.grant db.grantPrivilegesToRole( db.grantRolesToRole( db.grantRolesToUser( > db.grantRolesToUser('root',[{role:"custom",db:"local"}]) 2020-04-29T15:21:48.007+0200 E QUERY [thread1] Error: No role named custom@local : _getErrorWithCode@src/mongo/shell/utils.js:25:13 DB.prototype.grantRolesToUser@src/mongo/shell/db.js:1640:19 @(shell):1:
yopp
без указания скоупа
^ вы крайне невнимательно читаете db.grantRolesToRole("root", ["custom"])
Dmitry
The syntax for this resource is { anyResource: true }.
пардон, ошибся. Но это не имеет значения: > db.dropRole("custom") true > db.createRole({role:"custom",privileges: [ {resource: {anyResource: true }, actions: ["anyAction"] }], roles: []}) { "role" : "custom", "privileges" : [ { "resource" : { "anyResource" : true }, "actions" : [ "anyAction" ] } ], "roles" : [ ] } > db.grantRolesToUser('root',[{role:"custom",db:"local"}]) 2020-04-29T15:24:00.550+0200 E QUERY [thread1] Error: No role named custom@local : _getErrorWithCode@src/mongo/shell/utils.js:25:13 DB.prototype.grantRolesToUser@src/mongo/shell/db.js:1640:19 @(shell):1:1 >
Dmitry
Нелья модифицировать build-in роли
yopp
тьфу, grantRolesToUser
Dmitry
тьфу, grantRolesToUser
ну он возьмет да подставит туда db: admin же
yopp
вы сначала сделайте