Regelmäßige Benutzer in CouchDB erstellen

70

Wie kann ich in CouchDB reguläre Benutzer erstellen, die keine Administratoren sind?

IDanil
quelle
1
Dieser Wiki-Artikel könnte Sie interessieren. wiki.apache.org/couchdb/How_to_create_users_via_script
user2247543
Was sind die Namensregeln? Ich kann nirgendwo eine Antwort finden. Kann ein Benutzername eine E-Mail-Adresse sein?
Costa
Benutzernamen können absolut jede UTF-8-Zeichenfolge sein. Dies ist beispielsweise der Grund, warum couchdb_peruserBenutzernamen gehasht werden müssen, um Datenbanknamen zu erstellen. Es gibt einige Einschränkungen, die Sie im Designdokument für die Benutzerdatenbank finden können : - Benutzernamen dürfen nicht mit einem Unterstrich beginnen _- Benutzernamen dürfen keinen Doppelpunkt enthalten : _ (Es ist 2019 immer noch schwierig, online eine Antwort darauf zu finden)
Leonid Shevtsov

Antworten:

99

Zuerst legen Sie den Benutzer in die _usersDatenbank. Die ID des Dokuments muss org.couchdb.user:usernamez

Verwenden Sie mit CouchDB 1.2.0 oder höher Folgendes:

{
    "_id": "org.couchdb.user:dbreader",
    "name": "dbreader",
    "type": "user",
    "roles": [],
    "password": "plaintext_password"
}

CouchDB hasht & Salt das Passwort für Sie auf der Serverseite und speichert die Werte in den Feldern password_shaund salt(siehe unten).

Bei CouchDB <1.2.0 muss das Benutzerdokument folgendermaßen aussehen:

{
    "_id": "org.couchdb.user:dbreader",
    "name": "dbreader",
    "type": "user",
    "roles": [],
    "salt": "54935938852dd34f92c672ab31e397cedaf0946d",
    "password_sha": "42253ea4461a604f967813aaff90b139d7018806"
}

Beachten Sie, dass CouchDB 1.3.0 und höher PBKDF2 anstelle von aha & salt zum Hashing des Kennworts verwendet.

Anschließend können Sie eine Authentifizierung pro Datenbank erstellen, indem Sie ein Dokument mit der ID _security in einer bestimmten Datenbank erstellen, die nicht versioniert ist, z

{
    "admins": {
        "names": ["dbadmin"],
        "roles": ["editor"]
    },
    "readers": {
        "names": ["dbreader"],
        "roles": ["reader"]
    }
}

Dies bedeutet, dass sich _usersneben dem Administrator dbadmin und dbreader 2 Benutzer befinden . Dies sollte der Fall sein, wenn Sie zu faul sind, um das bereits vorgeschlagene Dokument zu lesen.

Gjorgji Tashkovski
quelle
1
Ich kann die Namenskonventionen nicht herausfinden. Gibt es Einschränkungen hinsichtlich des Benutzernamens? Außer dem Präfix org.couchdb.user:
Costa
So werden Benutzerkennwörter von jedem gesehen, wenn Sie sie speichern? und wie man sie hasht?
Astroanu
1
@astroanu: Sie veröffentlichen es im Klartext, ja, aber wenn es vom Server (und jeder weiteren GET-Anfrage danach) an Sie zurückkommt, wird nur die gesalzene und gehashte Version des Passworts zurückgegeben.
MidnightLightning
Was ist mit Cloudant?
Sebastián Rojas
20

Die CouchDB-Dokumentation enthält einen kurzen Artikel über die Sicherheitsfunktionen von CouchDB und die Konfiguration eines "Readers", der einem Benutzer in einer relationalen Datenbank ähnelt.

Nikolaus Gradwohl
quelle
3
Das ist richtig. Die kurze Antwort auf IDanils Frage lautet: "Erstellen Sie ein Dokument in der _usersDatenbank." Ihr Link erklärt jedoch alle Details und Auswirkungen.
JasonSmith
-13

Ich denke, Sie müssen ein Web-Framework vorlegen, um dies so zu tun, wie es viele Websites tun. Couchdb-Administratorrollen funktionieren nicht Datensatz für Datensatz. Wenn Sie also einen Leser erstellen, der die Profile oder die Kontotabelle lesen kann, kann er Datensatz lesen.

Jim
quelle
Dieser Beitrag erfordert eine Erklärung, warum so viele Leute ihn abgelehnt haben. Mit CouchDB können Sie Benutzer erstellen, indem Sie ein JSON-Objekt an einen der REST-API-Endpunkte senden. Die Struktur dieses Dokuments wurde von Gjorgji in seinem Beitrag dargelegt.
Ruud Verhoef