Cześć,
Link do projektu: https://github.com/lolnewbie/lubienosql
Mam potrzebę postawienia pierwszych kroków w MongoDB. W tym celu stworzyłem zasób REST, który pozwala na dodawanie nowego zasobu oraz pobranie wszystkich z kolekcji, co było tak proste jak się spodziewałem. Aplikacja działa na domyślnej konfiguracji bez autoryzacji. Schody zaczynają się jak chcę dodać autoryzację i jest to zaskakująco trudne.
Co chcę zrobić?
- aby baza była zabezpieczona użytkownikiem i hasłem
- konfigurowana za pomocą najlepiej jednego property mongodb_uri (które docelowo może być secretem pobieranym np. z Vaulta), więc jest dla mnie ok, że login,hasło, kolekcja z użytkownikami i nazwa bazy będą w linku
- siedze nad tym dobre 2.5h i mi to nie działa, pomyślałem więc, że się z Wami skonsultuje
- początkowo chciałbym uruchomić aplikacje z domyślnym użytkownikiem dev/example jako rola root
- docelowo chciałbym utworzyć użytkownika z konkretną rolą:
db.createUser(
{
user: 'spring',
pwd: 'password',
roles: [
{
db: 'employees',
role: 'readWrite'
}
]
});
Po uruchomieniu docker-compose nie widać błędu.
Aby aplikacja uruchomiła się należy zakomentować w database/dev/data/docker-compose.yml:
# environment:
# MONGO_INITDB_ROOT_USERNAME: dev
# MONGO_INITDB_ROOT_PASSWORD: example
# MONGO_INITDB_DATABASE: testdb
# command: "mongod --auth"
W resources/application.yml zakomentować:
#spring:
# data:
# mongodb:
# uri: mongodb://dev:example@localhost/employees?authSource=admin
Używam oficjalnego obrazu dockerowego, który domyślnie działa bez autoryzacji:
https://hub.docker.com/_/mongo/
Problem prawopodobnie leży po stronie dokera, ponieważ również nie mogę połączyć się przez RoboMongo ani klienta IntelliJ. Udaje się natomiast połączyć z konsolą i zobaczyć użytkownika w bazie (myślałem, że pomoże # command: "mongod --auth" ale to za mało):
$ mongo "mongodb://dev:example@localhost/employees?authSource=admin"
MongoDB shell version v4.4.3
connecting to: mongodb://localhost:27017/employees?authSource=admin&compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("29e32cf2-bb8c-4c0d-8a16-ee8d425a0cdb") }
MongoDB server version: 4.4.3
---
The server generated these startup warnings when booting:
2021-02-06T21:54:07.429+00:00: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine. See http://dochub.mongodb.org/core/prodnotes-filesystem
2021-02-06T21:54:08.394+00:00: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. We suggest setting it to 'never'
---
---
Enable MongoDB's free cloud-based monitoring service, which will then receive and display
metrics about your deployment (disk utilization, CPU, operation statistics, etc).
The monitoring data will be available on a MongoDB website with a unique URL accessible to you
and anyone you share the URL with. MongoDB may use this information to make product
improvements and to suggest MongoDB products and deployment options to you.
To enable free monitoring, run the following command: db.enableFreeMonitoring()
To permanently disable this reminder, run the following command: db.disableFreeMonitoring()
---
> use admin
switched to db admin
> show users
{
"_id" : "admin.dev",
"userId" : UUID("c32bc778-7fb1-418b-a2b9-206eba39b0bd"),
"user" : "dev",
"db" : "admin",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
],
"mechanisms" : [
"SCRAM-SHA-1",
"SCRAM-SHA-256"
]
}
>
Czytam w konfiguracji obrazu czego własciwie mi brakuje.
Dzięki za pomoc.