Weiter zum Inhalt

MongoDB Frühling im Boot

MongoDB Logo

Es ist endlich soweit, ein Projekt in dem ich MongoDB produktiv einsetzen kann. Und wie es der Zufall will, ist MongoDB 3.0 mittlerweile stabil und damit erste Wahl für eine frische Installation.

Mit der neuen Version wechselt MongoDB das user model von MONGODB-CR zu SCRAM-SHA-1 (siehe auch Security Changes). Eigentlich alles ganz easy, oder?
Spring Logo

Nun, ist es auch tatsächlich, wenn man die neuesten Java MongoDB Treiber nutzen kann. Was aber wenn das Projekt auf dem wundervollen Spring Boot basiert und MongoDB „nur“ über Spring Data MongoDB als einfacher Persistenzcontainer genutzt wird? Nun, dann bekommt mein ein Problem. Denn die Authentifikation wird dann nicht so einfach funktionieren.

Aber keine Angst, wir können einen kleinen Workaround nutzen um dennoch ans Ziel – eine Spring Boot / Spring Data MongoDB Anwendung die MongoDB mit aktiver Authentifikation nutzt – zu kommen. Dieser Workaround wird im Mongo DB Jira in einem Kommentar zum Issue SERVER-17459 aufgezeigt. Mit MongoDB 3.0 wird zwar das alte user model aus Version 2.4 pensioniert (authSchema = 2), aber das user model mit authSchema = 3 wird weiterhin unterstützt.

Kommen wir also endlich zum praktischen Teil.  Wie kann ich mit meiner Spring Boot basierten Java-Anwendung nun MongoDB 3 mit aktiver Au­then­ti­fi­ka­ti­on nutzen? Nun, zuerst installieren wir die aktuellste Version. Auf einem Ubuntu Server zum Beispiel mittels

sudo apt-get install mongodb-org

Die Installation sollte mit einer gestarteten MongoDB Instanz enden. Zu dieser verbinden wir uns mittels der mit-installierten Shell:

mongo localhost/admin

und führen folgenden Befehl aus:

db.system.version.save({"_id" : "authSchema", "currentVersion": 3})

Was wir jetzt noch brauchen ist ein Nutzer, mit dem wir den Rest später konfigurieren können. Dafür brauchen wir nur folgenden Befehl ausführen (in der admin Datenbank und mit einem richtigen Password anstatt <PUT REALLY SECURE PASSWORD HERE>):

db.createUser( {
 user: "siteRootAdmin",
 pwd: "<PUT REALLY SECURE PASSWORD HERE>",
 roles: [ "root" ]
 });

Das war es schon an Vorbereitung. Wir können nun die Au­then­ti­fi­ka­ti­on in der Konfigurationsdatei /etc/mongod.conf aktivieren:

#noauth=true
auth=true

und den Service neu starten:

sudo service mongod restart

Von nun an muss man sich mit einem Nutzer gegenüber der MongoDB authentifizieren. Für die Shell geht das so:

mongo --username admin --password <THE PASSWORD YOU CHOSE EARLIER>

Für unsere Spring Applikation können wir folgende Zeile in den application.properties setzen:

spring.data.mongodb.uri=mongodb://admin:<THE PASSWORD YOU CHOSE EARLIER>@localhost:27017

natürlich wieder mit <THE PASSWORD YOU CHOSE EARLIER> mit dem richtigen Passwort ersetzt.

Zu guter Letzt noch der (offensichtliche) Hinweis: Es ist absolut nicht ratsam den Nutzer mit der uneingeschränkten root Rolle für die Webapplikation zu nutzen. MongoDB bietet eine nette Dokumentation zum Thema Nutzermanagement an. Da lohnt sich das Lesen und Umsetzen.

 

Kommentar verfassen

Dein E-Mail wird nicht veröffentlicht oder weitergegeben. Pflichtfelder sind mit * markiert.

By continuing to use the site, you agree to the use of cookies. more information

The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below then you are consenting to this.

Close