Google
journalctl -n 50 -u mongodb
Google
No entries
Google
КАК ИСПРАВИТЬ ?
Oleg
надо логи почитать.
Oleg
для этого нужно посмотреть куда логирруется
Google
где логи ?
Google
покажу
Oleg
в конфиге есть опции типа
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
Google
## content
systemLog:
destination: file
logAppend: true
path: /www/server/mongodb/log/config.log
# Where and how to store data.
storage:
dbPath: /www/server/mongodb/data
directoryPerDB: true
journal:
enabled: true
# how the process runs
processManagement:
fork: true
pidFilePath: /www/server/mongodb/log/configsvr.pid
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1
#operationProfiling:
#replication:
# replSetName: bt_main
security:
authorization: disabled
javascriptEnabled: false
#sharding:
# clusterRole: shardsvr
Google
Google
Вот лог
Google
Google
Google
Oleg
"msg": "This version of MongoDB is too recent to start up on the existing data files. Try MongoDB 4.2 or earlier."
Oleg
что за история этого экземпляра?
очень странно что в центос-8 используется инит-скрипт
Google
это панел
Google
было MongoDB 4.2 после Update MongoDB 4.4.6 не запускается
Oleg
ошибка говорит что файлы в каталоге с данными от более новой версии
Oleg
ну... значит надо поднять до 4.4
Google
как обновить ?
Oleg
вообще yum update / yum install
но у вас тут какая-то индивидуальщина
Oleg
в /etc/yum.repos.d/ в каком-то из файликов подправить версию
https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.4/$basearch/
или самостоятельно скачать пакеты одинаковой версии https://repo.mongodb.org/yum/redhat/8/mongodb-org/4.4/x86_64/RPMS/
и обновить, можно даже юмом.
Oleg
я вообще очень рекомендую сбекапить имеющиеся бинари, конфиги и самое главное данные /www/server/mongodb/data на всякий случай
Max
Добрый день, имеется сервер с установленным на нем mongodb и mongodb compass, возможно ли настроить удалённое управление через Web интерфейс?
Рик
Всем здрасте, вопрос по поводу mongorestore
Если указать папку восстановливает не все коллекции
А если отдельно то норм, в чем проблема?
Mikhail
Всем привет. подскажите с ролями, не могу сделать updateUser. Пишет Updating user failed: not authorized on qwe to execute command
1. Создал БД "qwe"
2. Создал в ней пользователя "cs"
3. Дал этому пользователю роль dbOwner
{
"_id" : "qwe.cs",
"user" : "cs",
"db" : "qwe",
"roles" : [
{
"role" : "dbOwner",
"db" : "qwe"
}
]
}
Создавать, удалять пользователей могу.
Но при попытке db.updateUser("user2", {roles: ["readWrite"]})
Error: Updating user failed: not authorized on qwe to execute command { updateUser: "user2", roles: [ "readWrite" ], writeConcern: { w: "majority", wtimeout: 600000.0 }, lsid: { id: UUID("253fb888-cc36-4d91-ba65-dc088bcb5c9b") }, $db: "qwe"
Mikhail
что я делаю не так?
yopp
Всем привет. подскажите с ролями, не могу сделать updateUser. Пишет Updating user failed: not authorized on qwe to execute command
1. Создал БД "qwe"
2. Создал в ней пользователя "cs"
3. Дал этому пользователю роль dbOwner
{
"_id" : "qwe.cs",
"user" : "cs",
"db" : "qwe",
"roles" : [
{
"role" : "dbOwner",
"db" : "qwe"
}
]
}
Создавать, удалять пользователей могу.
Но при попытке db.updateUser("user2", {roles: ["readWrite"]})
Error: Updating user failed: not authorized on qwe to execute command { updateUser: "user2", roles: [ "readWrite" ], writeConcern: { w: "majority", wtimeout: 600000.0 }, lsid: { id: UUID("253fb888-cc36-4d91-ba65-dc088bcb5c9b") }, $db: "qwe"
Проверье что у вас authDb=qwe. В целом лучше избегать создания пользователей за пределами admin, так как это может вызвать очень большое количество проблем
yopp
в монге аутентификация сделана крайней неинтуитивно, так как скоупы аутентификации зависят от выбранного источника аутентификации
yopp
а не от конфигурации прав
yopp
Т.е. создавая пользователя в базе qwe, вы создаёте его в отдельном аутентификационном и авторизационном хранилище, которое явно нужно указать как authSource/authDB
yopp
при этом источник по-умолчанию зависит от uri
yopp
если вы явно не указываете в uri базу, то тогда это будет admin, а если указываете, то та база, которую указали
Mikhail
$ mongo -u cs -p --authenticationDatabase qwe
MongoDB shell version v4.0.21
Enter password:
connecting to: mongodb://127.0.0.1:27017/?authSource=qwe&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("9e37c41e-a398-4604-b3d0-3c7bfe6bb4b4") }
MongoDB server version: 4.0.25
> use qwe
switched to db qwe
> db.updateUser("user1", {roles: ["readWrite"]})
2021-08-18T16:41:30.326+0300 E QUERY [js] Error: Updating user failed: not authorized on qwe to execute command { updateUser: "user1", roles: [ "readWrite" ], writeConcern: { w: "majority", wtimeout: 600000.0 }, lsid: { id: UUID("9e37c41e-a398-4604-b3d0-3c7bfe6bb4b4") }, $db: "qwe" }
Mikhail
Mikhail
у меня задача сделать пользователя-администратора на некоторые БД, что б он мог в этих БД create\delete\update пользователей
Mikhail
если я сделаю такого администратора с правами редактирования пользователей в namespace admin то это получиться полноценный админ всей монги
yopp
нет
yopp
это распространнёное заблуждение
yopp
скоуп права определяется не authSource, а указанным в самом праве скоупом
yopp
в вашем случае вы явно указали что роль dbOwner ограничена базой qwe
yopp
по поводу использования updateUser: там есть ряд нюансов, так как нет действия userUpdate
yopp
https://docs.mongodb.com/v4.0/reference/command/updateUser/#required-access
yopp
https://docs.mongodb.com/v4.0/reference/privilege-actions/
Mikhail
если я сделаю такого пользователя
"user" : "cs",
"db" : "admin",
"roles" : [
{
"role" : "dbOwner",
"db" : "qwe"
}
]
я все равно не смогу апдейтить пользователей в qwe
Mikhail
я сегодня целый день читал эту документацию, понимания не пришло
Mikhail
я так понимаю для update нужна привилегия changeCustomData которая входит в роль dbOwner, но у меня не работает, если я завожу пользователя-админа с такой ролью вне зависимости от БД
Mikhail
$ mongo -u cs -p --authenticationDatabase admin
MongoDB shell version v4.0.21
Enter password:
connecting to: mongodb://127.0.0.1:27017/?authSource=admin&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("14f90b02-560e-4140-94e0-3d8072f64a7b") }
MongoDB server version: 4.0.25
> show dbs
qwe 0.000GB
> use qwe
switched to db qwe
> db.updateUser("user2", {roles: ["readWrite"]})
2021-08-18T16:56:16.571+0300 E QUERY [js] Error: Updating user failed: not authorized on qwe to execute command { updateUser: "user2", roles: [ "readWrite" ], writeConcern: { w: "majority", wtimeout: 600000.0 }, lsid: { id: UUID("14f90b02-560e-4140-94e0-3d8072f64a7b") }, $db: "qwe" }
Mikhail
это с таким пользователем
"user" : "cs",
"db" : "admin",
"roles" : [
{
"role" : "dbOwner",
"db" : "qwe"
}
],
Mikhail
или я опять что-то не так понял?
yopp
а db.getUsers() что-то отображает?
Mikhail
в БД qwe ?
Mikhail
два пользователя
"user" : "cs",
"db" : "qwe",
"roles" : [
{
"role" : "dbOwner",
"db" : "qwe"
}
],
"mechanisms" : [
"SCRAM-SHA-1",
"SCRAM-SHA-256"
]
},
{
"_id" : "qwe.user1",
"userId" : UUID("aebf9647-dd01-433a-8906-615b9e4b0995"),
"user" : "user1",
"db" : "qwe",
"roles" : [
{
"role" : "read",
"db" : "qwe"
}
Mikhail
пользователя cs у меня получается два, один в qwe второй в admin
yopp
так, кажется я полнял вашу задачу
yopp
mongo
use admin
db.createUser({ user: "root", pwd: "sikret", roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ] })
db.adminCommand( { shutdown: 1 } )
# stop mongo; enable auth; start mongo
mongo -u root -p sikret --authenticationDatabase=admin
use admin
db.createUser({ user: "qwe-admin", pwd: "qwe", roles: [ { role: "dbOwner", db: "qwe" }] })
db.createUser({ user: "asd-admin", pwd: "asd", roles: [ { role: "dbOwner", db: "asd" }] })
mongo qwe -u qwe-admin -p qwe --authenticationDatabase=admin
use qwe
db.createUser({ user: "qwe-user", pwd: "qwe-user", roles: [ { role: "read", db: "qwe" } ] })
db.grantRolesToUser("qwe-user", [{role: "readWrite", db: "qwe"}])
db.revokeRolesFromUser("qwe-user", ["read"])
use asd
db.createUser({ user: "qwe-user", pwd: "qwe-user", roles: [ { role: "read", db: "qwe" } ] })
# fail
mongo qwe -u qwe-user -p qwe-user --authenticationDatabase=qwe
use qwe
db.data.insertOne({hello: "world"})
use asd
db.data.insertOne({hello: "world"})
# fail
yopp
вероятно вы хотите вот так
yopp
а по поводу updateUsers, там есть вот такое вот требование
You must have access that includes the revokeRole action on all databases in order to update a user’s roles array.
yopp
т.е. qwe-admin не может использовать updateUsers для обновления ролей, не имея привилегии revokeRole со скоупом db: “”
yopp
но при этом revokeRolesFromUser и grantRoleToUser работают
Mikhail
хм, пойду попробую
Mikhail
добавил кастомную роль с revokeRole.
"user" : "cs",
"db" : "admin",
"roles" : [
{
"role" : "dbOwner",
"db" : "qwe"
},
{
"role" : "revokeRoleCustomDataRole",
"db" : "admin"
}
],
Заработало
Mikhail
@dd_bb спасибо большое)
yopp
yopp
в принципе, updateUser использовать не стоит, кроме разве что customData и ограничения доступа по адресам
Mikhail
началось всё с веб UI для управления пользователями. там удобнее использовать updateUser, чтоб был только один метод, одна форма
yopp
вы можете посчитать дифф ролей и соотвествующими командами добавить/удалить роли
Vladimir
Как организовать взаимные связи в монго? Если я добавлю в Запись коллекции А ссылку ObjectId на скажем запись из коллекции B, то получается что я тут же должен добавить с запись коллекции B сылку на только что добавленую запись из коллекции A ( или запушить в массив ссылок если 1:N), а при изменении и удалении рабирать весь этт гемморой руками? Или есть более простые способы?
Google
Всем привет можете помочь я делаю поиск по user_id И telegram_id получаю пустой массив [ ] user_id есть инфо а telegram_id нет как исправить чтобы было поиск по двум
Google
Mikhail
Vladimir
можем вам больше реляционная БД подойдет?
Мне - да. Но есть заказчик. Это как в Ростове-на-Дону, в позапрошлом веке, чувак заказал дом. Приходит на стройку, говорит а где колонны, я ж просил что бы колонны были. Архитектор говорит так этож Ренессанс. А заказчик в ответ, за заказ тебе деньги тоже Ренессанс платить будет?
Joe
Михаил
Google
Google
Скажем я хочу искать по user_id + telegram_id но может быть " " telegram_id поиск должен работать хотябы из какойто из них совподает
Joe