Size: a a a

2020 April 29

DS

Dmitry Sergeev in MongoDB Russian
yopp
вам в документации написано чёрным по белому
Нет ты не прав.

Создаем пользвателся в базе admin, с правами на базу test
> use admin
switched to db admin
> db.createUser({ user: "test", pwd: "test", roles: [{role: "readWrite", db: "test"}]})
Successfully added user: {
"user" : "test",
"roles" : [
 {
  "role" : "readWrite",
  "db" : "test"
 }
]
}
>


Заходим в базу тест, убеждаемся что там пользователся нет:
>
use test
switched to db test
> db.getUsers()
[ ]

Делаем запрос от пользователя test в базу test

root@test2:~# mongo --norc -utest -ptest --authenticationDatabase admin --eval 'db.getCollectionNames()' test
MongoDB shell version v3.6.18
connecting to: mongodb://127.0.0.1:27017/test?authSource=admin&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("66821ec0-2b47-4bdc-a4b1-143031d15d17") }
MongoDB server version: 3.6.18
[
"collection_test",
"incr",
"incr2",
"incr3",
"incr4",
"t1",
"t2",
"test"
]
источник

DS

Dmitry Sergeev in MongoDB Russian
yopp
но вам нужно в admin дать root роль на базу local
нет возможности такой. Я выше писал. Могу еще раз написать
источник

y

yopp in MongoDB Russian
Dmitry Sergeev
Нет ты не прав.

Создаем пользвателся в базе admin, с правами на базу test
> use admin
switched to db admin
> db.createUser({ user: "test", pwd: "test", roles: [{role: "readWrite", db: "test"}]})
Successfully added user: {
"user" : "test",
"roles" : [
 {
  "role" : "readWrite",
  "db" : "test"
 }
]
}
>


Заходим в базу тест, убеждаемся что там пользователся нет:
>
use test
switched to db test
> db.getUsers()
[ ]

Делаем запрос от пользователя test в базу test

root@test2:~# mongo --norc -utest -ptest --authenticationDatabase admin --eval 'db.getCollectionNames()' test
MongoDB shell version v3.6.18
connecting to: mongodb://127.0.0.1:27017/test?authSource=admin&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("66821ec0-2b47-4bdc-a4b1-143031d15d17") }
MongoDB server version: 3.6.18
[
"collection_test",
"incr",
"incr2",
"incr3",
"incr4",
"t1",
"t2",
"test"
]
это вы не правы
источник

DS

Dmitry Sergeev in MongoDB Russian
yopp
это вы не правы
нет, ты не прав. Пруфы выше, с командами и выводом от них
источник

y

yopp in MongoDB Russian
вы путаете хранилище пользователей и скоупы
источник

y

yopp in MongoDB Russian
Заходим в базу тест, убеждаемся что там пользователся нет:
> use test
switched to db test
> db.getUs
источник

y

yopp in MongoDB Russian
вот тут вы и ошибаетесь
источник

y

yopp in MongoDB Russian
вам необходимо создавать пользователей в admin базе, давая им роли на другие базы
источник

DS

Dmitry Sergeev in MongoDB Russian
yopp
вот тут вы и ошибаетесь
В чем ошибка? В базе test, нет ни одного пользователся
источник

y

yopp in MongoDB Russian
admin база используется как хранилище для аутентификации по-умолчанию
источник

y

yopp in MongoDB Russian
Dmitry Sergeev
В чем ошибка? В базе test, нет ни одного пользователся
да, и там их и не должно быть
источник

DS

Dmitry Sergeev in MongoDB Russian
yopp
вам необходимо создавать пользователей в admin базе, давая им роли на другие базы
выше как раз пример того, как я создал пользователя в базе admin, с доступом в базу test
источник

y

yopp in MongoDB Russian
потому что у вас наверняка authDb не выставлен
источник

y

yopp in MongoDB Russian
а значит у вас хранилище по-умолчанию admin
источник

DS

Dmitry Sergeev in MongoDB Russian
yopp
да, и там их и не должно быть
можно пользователя в базе test создать
источник

y

yopp in MongoDB Russian
Да, можно, но это не то что вы имеете ввиду
источник

DS

Dmitry Sergeev in MongoDB Russian
yopp
а значит у вас хранилище по-умолчанию admin
в запросе хранилище явно указывается: mongo --norc -utest -ptest --authenticationDatabase admin --eval 'db.getCollectionNames()' test

authenticationDatabase - выбор базы для ауетантификации
test в конце - база в которой запрос делается
источник

y

yopp in MongoDB Russian
Это работет не так
источник

y

yopp in MongoDB Russian
Это не ваша вина, я уже написал что в монге с правами бардак
источник

y

yopp in MongoDB Russian
Но вы неверно понимаете как это работает. Вам необходимо деражть список _всех_ пользователей и их ролей в admin, вне зависимости от того на каую базу вы хотите выставить права
источник