Metadata-Version: 2.4
Name: mdbusrmng
Version: 1.0.0
Summary: CLI-Tool zum Auflisten, Anlegen und Löschen von MongoDB-Nutzern
Keywords: mongodb,cli,user,management
Author: Thomas Baer (SLUB Dresden)
Author-email: Thomas Baer (SLUB Dresden) <thomas.baer@slub-dresden.de>
License-Expression: MIT
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Console
Classifier: Intended Audience :: System Administrators
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Database
Classifier: Topic :: Database :: Front-Ends
Requires-Dist: click>=8.1
Requires-Dist: pymongo>=4.10
Requires-Dist: python-dotenv>=1.0
Requires-Python: >=3.14
Project-URL: Homepage, https://github.com/thomsbe/mdbusrmng
Project-URL: Repository, https://github.com/thomsbe/mdbusrmng
Project-URL: Issues, https://github.com/thomsbe/mdbusrmng/issues
Description-Content-Type: text/markdown

# mdbusrmng – MongoDB User Manager

CLI-Tool zum Auflisten, Anlegen und Löschen von MongoDB-Nutzern.

Quellcode: [github.com/thomsbe/mdbusrmng](https://github.com/thomsbe/mdbusrmng)

 mdbusrmng listet alle Datenbanken eines Servers mit den dort definierten
Nutzern, zeigt die Rechte eines Nutzers über alle Datenbanken und
Collections an und legt bzw. löscht Nutzer mit definierten Rollen.

## Installation

Python 3.14 wird über [uv](https://docs.astral.sh/uv/) verwendet.

Aus dem Quellverzeichnis:

```bash
uv sync
uv run mdbusrmng --help
```

Als Systemwerkzeug (nach Veröffentlichung auf PyPI):

```bash
uv tool install mdbusrmng
```

## Verbindung

Die MongoDB-URI wird in dieser Reihenfolge ermittelt:

1. Option `--uri` (steht **vor** dem Subkommando)
2. Umgebungsvariable `MDBUSRMNG_URI`
3. `.env`-Datei im aktuellen Verzeichnis mit derselben Variable
   (überschreibt keine gesetzten Umgebungsvariablen)

Ohne jede Quelle bricht das Tool mit einer Fehlermeldung auf stderr und
Exit-Code 1 ab.

Bei Admin-Zugang muss meist `?authSource=admin` an die URI angehängt
werden:

```
mongodb://admin:geheim123@127.0.0.1:27017/?authSource=admin
```

## Kommandos

### Datenbanken und Nutzer auflisten (`list`)

```bash
mdbusrmng --uri mongodb://admin:geheim123@127.0.0.1:27017/?authSource=admin list
```

Listet alle Datenbanken (ohne `local`/`config`) mit ihren Nutzern und
Rollen; `admin` erscheint mit.

Nur die Nutzer einer Datenbank:

```bash
mdbusrmng list kunden
```

Als einzeiliges JSON (für Pipes nach `jq`/`yq`):

```bash
mdbusrmng list --json | jq '.[0]'
```

### Rechte anzeigen (`show`)

Alle Rollen und Privileges eines Nutzers über alle Datenbanken:

```bash
mdbusrmng show kunden_rw
```

Gefiltert auf eine Datenbank bzw. Datenbank und Collection:

```bash
mdbusrmng show kunden_rw --db kunden
mdbusrmng show kunden_rw --db kunden.personen
```

Auch hier ist `--json` möglich.

**Copy-&-Paste-URI:** `show` gibt für jeden Eintrag zusätzlich eine
fertige Verbindungs-URI für den Nutzer aus, dafür gedacht, sie in Tools
und Anwendungen einzusetzen:

```text
URI: mongodb://kunden_rw:<PASSWORD>@server:27017/?authSource=kunden
```

Server und Port stammen aus der aktuell verwendeten URI, der Passwort-
Platzhalter `<PASSWORD>` ist durch das echte Nutzerpasswort zu ersetzen
(das Tool kennt und zeigt es nie). Die `authSource` enthält die
Authentifizierungs-Datenbank des Nutzers; weitere Parameter der
verwendeten URI (z. B. `tls=true`) bleiben erhalten. In der JSON-Ausgabe
findet sich die URI als Feld `uri` je Eintrag.

### Nutzer anlegen (`create`)

Standardmäßig erhält der Nutzer die Rollen `readWrite` und `dbAdmin` auf
der Ziel-Datenbank (Lese-/Schreib-/Adminrechte):

```bash
mdbusrmng create --name webuser --password 'geheim' kunden
```

Mit `--ro` nur die Rolle `read` (Read-Only-User):

```bash
mdbusrmng create --ro --name webro --password 'geheim' kunden
```

Fehlt `--password`, wird es interaktiv verdeckt abgefragt (mit
Bestätigung).

Existiert der Nutzer bereits, bricht das Tool mit einer Fehlermeldung auf
stderr und Exit-Code 1 ab.

### Nutzer löschen (`delete`)

```bash
mdbusrmng delete --name webuser kunden
```

Ein Update von Nutzern ist nicht vorgesehen – Nutzer löschen und neu
anlegen.

## Manuelle Testumgebung (Docker)

Ein lokaler MongoDB-Server für eigene Tests:

```bash
docker compose up -d
bash scripts/seed-testdata.sh
```

Das Seed-Script legt 3 Datenbanken (`kunden`, `bestellungen`, `lager`)
mit je 2 Collections und 2 Demo-Usern an (`<db>_rw` mit Passwort
`test123`, `<db>_ro` ebenfalls `test123`). Zurücksetzen:

```bash
docker compose down -v
```

## Tests

Die Tests starten bei verfügbarem Docker automatisch einen eigenen
MongoDB-Container (Image `mongo:8.2`); ohne Docker werden die
DB-Tests übersprungen.

```bash
uv run pytest
```

## Lizenz

MIT – siehe [LICENSE](LICENSE).

## Disclaimer

Dieser Code wurde mit Unterstützung eines Large Language Models (LLM)
erstellt. Der Autor hat den Code geprüft und gegen eine echte
MongoDB-Umgebung getestet, trägt aber die volle Verantwortung für dessen
Inhalt.
