2016-12-23 4 views
1

Ich habe 4 Instanzen von mongodb ausgeführt (set Replika) mit folgenden mongodb.conf Datei für jede Instanz:Authenticate mongodb Replikatsatzes

# mongod.conf 

# for documentation of all options, see: 
# http://docs.mongodb.org/manual/reference/configuration-options/ 

# where to write logging data. 
systemLog: 
    destination: file 
    logAppend: true 
    path: /root/mongodata/log/mongod.log 

# Where and how to store data. 
storage: 
    dbPath: /root/mongodata/db1 # also have db2 and so on for rest of the instances 
    journal: 
    enabled: true 
# engine: 
# mmapv1: 
# wiredTiger: 

# how the process runs 
processManagement: 
    fork: true # fork and run in background 
    pidFilePath: /root/mongodata/db1/mongod.pid # location of pidfile, different for 4 instances 

# network interfaces 
net: 
    port: 30000 #port different for 4 different instances 
    bindIp: 12.123.321.432(example ip, same for all 4 .conf files) 

# security 
security: 
    KeyFile: /path to my keyfile location 

# authorization: enabled 

#operationProfiling: 

replication: 
    replSetName: testReplica #have this same for all 4 


#sharding: 

## Enterprise-Only Options 

#auditLog: 

#snmp: 

I auch eine Schlüsseldatei für die interne Authentifizierung wie folgt erstellt:

openssl rand -base64 756 > <path-to-keyfile> 
chmod 400 <path-to-keyfile> 

Nachdem alle Instanzen ausgeführt ich mongoShell wie folgt geöffnet:

mongo --host 12.123.321.432 --port 30000 

Ich bin in der Lage, die Schale zu öffnen, aber wenn ich versuche, einen Benutzer zu erstellen, erhalte ich die folgende Ausnahme:

2016-12-22T20:55:38.396-0500 E QUERY [thread1] Error: couldn't add user: not authorized on test to execute command { createUser: "root", pwd: "xxx", roles: [ { role: "root", db: "admin" } ], digestPassword: false, writeConcern: { w: "majority", wtimeout: 30000.0 } } : 
[email protected]/mongo/shell/utils.js:23:13 
[email protected]/mongo/shell/db.js:1230:11 
@(shell):1:1 

Ich habe versucht, dem Server-Betreiber db Schalt sagt aber nach wie vor nicht autorisierten, habe ich versucht, auch rs.initiate zu laufen () Befehl zum Definieren von primären und sekundären dbs, sagt nicht autorisiert. Ich lese auch, wenn ich die mongod mit Authentifizierung deaktiviert die interne Authentifizierung über keyfile wird die rollenbasierte Authentifizierung erzwingen. Was vermisse ich hier und wie würde ich es lösen? Danke im Voraus.

Antwort

1

Die Fehlermeldung zeigt, dass Sie keine Berechtigungen zum Ausführen des Befehls haben.

Nach Satz keyfile Parameter in Conf Datei, Mongo müssen anmelden Sie mit Auth-Benutzer.

Also, wenn Sie nicht Root-Benutzer haben.

  1. Start mongod ohne Auth config (nicht keyfile und security.authorization disable gesetzt) ​​
  2. erstellen Verwendung mit Root-Rolle db.createUser({user:"root",pwd:"rootpassword",roles:[{role:"root",db:"admin"}]})

wenn Sie Root-Benutzer haben. Sie sollten db.auth() oder login mongo mit Root-Rechten verwenden, um den Befehl rs.conf() auszuführen.

mongo --port portnumber -uroot -p --authenticationDatabase admin

oder nach der Anmeldung mit dem Befehl Mongo --port Port-Nummer

db.auth("root", "rootpassword")

ps. KeyFile ist für die interne Kommunikationssicherheit des Replikatsatzes vorgesehen.

+0

Sie sind fast richtig, aber für Replikat-Set war der Trick, mit leeren 'db'-Ordner zu starten und in' .conf'-Datei sollten Sie nicht den '' keyFile'-Parameter bereitstellen. Sobald Sie 'keyFile' eingeben, wird die interne Authentifizierung + der rollenbasierte Zugriff erzwungen. Starten Sie also ohne 'keyfile' und erstellen Sie die notwendigen Benutzer und starten Sie dann mit' keyFile' erneut, das zur '.conf' Datei hinzugefügt wird. Hinweis: Wenn Sie den 'keyFile'-Parameter angeben, müssen Sie' --auth' nicht verwenden, um die Authentifizierung zu aktivieren. Bitte aktualisieren Sie Ihre Antwort, damit ich als richtige Antwort markieren kann. Vielen Dank! – Gurkha

+0

@Gurkha ja, das ist richtig, Antwort habe aktualisiert, hoffe das hilft dir. – kext

Verwandte Themen