Ich habe viele dieser Antworten bemerkt. Verwenden Sie diesen Befehl:
use admin
welches zur Admin-Datenbank wechselt. Zumindest in Mongo v4.0.6 wird beim Erstellen eines Benutzers im Kontext der Admin-Datenbank ein Benutzer erstellt mit "_id" : "admin.administrator"
:
> use admin
> db.getUsers()
[ ]
> db.createUser({ user: 'administrator', pwd: 'changeme', roles: [ { role: 'root', db: 'admin' } ] })
> db.getUsers()
[
{
"_id" : "admin.administrator",
"user" : "administrator",
"db" : "admin",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
],
"mechanisms" : [
"SCRAM-SHA-1",
"SCRAM-SHA-256"
]
}
]
Ich betone "admin.administrator"
, denn ich habe eine Mongoid-Anwendung (Mongodb Ruby Adapter) mit einer anderen Datenbank als admin und verwende den URI, um auf die Datenbank in meiner mongoid.yml-Konfiguration zu verweisen:
development:
clients:
default:
uri: <%= ENV['MONGODB_URI'] %>
options:
connect_timeout: 15
retry_writes: false
Dies verweist auf die folgende Umgebungsvariable:
export MONGODB_URI='mongodb://administrator:changeme@127.0.0.1/mysite_development?retryWrites=true&w=majority'
Beachten Sie, dass die Datenbank mysite_development und nicht admin ist. Wenn ich versuche, die Anwendung auszuführen, wird die Fehlermeldung "Benutzeradministrator (Mechanismus: scram256) ist nicht berechtigt, auf mysite_development zuzugreifen" angezeigt.
Also kehre ich zur Mongo-Shell zurück, lösche den Benutzer, wechsle zur angegebenen Datenbank und erstelle den Benutzer neu:
$ mongo
> db.dropUser('administrator')
> db.getUsers()
[]
> use mysite_development
> db.createUser({ user: 'administrator', pwd: 'changeme', roles: [ { role: 'root', db: 'admin' } ] })
> db.getUsers()
[
{
"_id" : "mysite_development.administrator",
"user" : "administrator",
"db" : "mysite_development",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
],
"mechanisms" : [
"SCRAM-SHA-1",
"SCRAM-SHA-256"
]
}
]
Beachten Sie, dass _id und db geändert wurden, um auf die spezifische Datenbank zu verweisen, von der meine Anwendung abhängt:
"_id" : "mysite_development.administrator",
"db" : "mysite_development",
Nachdem ich diese Änderung vorgenommen hatte, verschwand der Fehler und ich konnte in meiner Anwendung eine Verbindung zu MongoDB herstellen.
Zusätzliche Hinweise:
In meinem obigen Beispiel habe ich den Benutzer gelöscht und den Benutzer im richtigen Datenbankkontext neu erstellt. Wenn Sie den Benutzer bereits im richtigen Datenbankkontext erstellt, ihm jedoch die falschen Rollen zugewiesen haben, können Sie dem Benutzer eine integrierte Mongodb-Rolle zuweisen:
db.grantRolesToUser('administrator', [{ role: 'root', db: 'admin' }])
Es gibt auch einen db.updateUser
Befehl, albiet, der normalerweise zum Aktualisieren des Benutzerkennworts verwendet wird.