#mongodb #authentication
#mongodb #аутентификация
Вопрос:
Поддерживает ли MongoDB in-memory Db аутентификацию?
Я использую аутентификацию в экземплярах mongo. Создан пользователь-администратор для обоих wiredTiger
и in-memory DB
. При подключении к wiredTiger
нему подключается, но не с in-memory DB
.
Комментарии:
1. На странице механизма хранения в памяти написано следующее: «Непостоянные данные включают данные приложения и системные данные, такие как пользователи, разрешения, …». Так что да, похоже, аутентификация / авторизация должны работать и там.
2. но когда я выполняю эти шаги, приведенные в документе mongo docs.mongodb.com/manual/tutorial/enable-authentication и перезагрузитесь после создания пользователя, после чего пользователь там больше не существует.
3. Какой пользователь, из
admin
БД? Не может быть. Но пользователь для вашей базы данных в памяти, конечно, исчез. Вы должны воссоздать его во время настройки этой базы данных.4. Итак, я должен создавать пользователя каждый раз, когда запускаю базу данных в памяти? Также как я могу создать пользователя при запуске в режиме с включенной авторизацией, поскольку в это время я не могу подключиться к imdb.?
Ответ №1:
Это то, что сработало для меня:
"mongodb-memory-server": "^8.9.0",
"jest": "^27.2.5",
"@nestjs/mongoose": "^9.0.3",
import { MongoMemoryServer } from 'mongodb-memory-server';
let mongo: MongoMemoryServer;
//..
mongo = await MongoMemoryServer.create({
// Not recommended as every instance will spawn on a random port.
// instance: { port: 27017 },
binary: { version: '4.0.28' },
auth: {
// Add the root user
customRootName: 'root-username',
customRootPwd: 'root-password',
// Add additional users
extraUsers: [
{
createUser: 'other-username',
pwd: 'other-password',
roles: [
{ role: 'readWrite', db: 'db-name' },
]
}
]
}
});
// Get the URI including random port
const mongoUri = await mongo.getUri();
//.. connect
При подключении убедитесь, что вы указали учетные данные для аутентификации, включая:
username
,password
,database
(имя базы данных предоставлено для чтения)
Полезные опции Jest
"test": "jest --maxWorkers=4 --force-exit --detectOpenHandles",
"test:mongo:debug": "MONGOMS_DEBUG=1 jest --maxWorkers=4 --force-exit --detectOpenHandles",
MONGOMS_DEBUG=1
включите режим отладки для базы данных в памяти. Очень полезно выяснить, что происходит.--force-exit
последнее средство для завершения процесса после запуска тестов, но рассмотритеmongoose.disconnect()
иawait mongo.stop();
не торопитесь.
Полезные ссылки:
Docker для интеграционных тестов
version: "3.7"
services:
db-mongo-service-test:
image: mongo:4.0.28 # Build from MongoDB image
container_name: db-mongo-test # Name the container
environment:
MONGO_INITDB_DATABASE: db-name # Set Database Name
MONGO_INITDB_ROOT_USERNAME: root-username # Set root username
MONGO_INITDB_ROOT_PASSWORD: "root-password" # Set root user password
volumes: # Add a non-root user via init script.
- ./server/scripts/mongo-init.js:/docker-entrypoint-initdb.d/mongo-init.js:ro
ports:
- 27020:27020
- 27017:27017