FB, anlegen eines ADMIN Benutzers, als Besitzer einer DB

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
musicones
Beiträge: 35
Registriert: Di 8. Sep 2009, 09:13
OS, Lazarus, FPC: Win 10 (L 1.6.2 FPC 3.0.0)
CPU-Target: 64Bit

FB, anlegen eines ADMIN Benutzers, als Besitzer einer DB

Beitrag von musicones »

Hallo,

ich schreibe an einer kleinen Anwendung, die eine Firebird Datenbank zur Datenspeicherung zu grunde legt.
Dazu möchte ich, dass die Anwendung folgendes macht:

1. Erkennen ob die Datenbank existiert
2. Ggf. einen Benutzer "ADMIN" mit GRANT OPTION auf Security.fdb anlegen
3. Datenbank über den "ADMIN" Benutzer anlegen
4. GRANT OPTION auf "ADMIN" Benutzer für die Datenbank setzen
5. Neue Benutzer über "ADMIN" Benutzer anlegen können.

Firebird Version ist 2.5.x. Server / Nicht-Embedded.

Beim Erststart wird also erkannt, dass die Datenbank nicht existiert. Ich prüfe, ob der Firebird Benutzer "ADMIN" existiert, angenommen, der ist noch nicht da möchte ich also diesen Benutzer mit GRANT OPTION anlegen. Wie mache ich das?

Möglichkeit 1: FB 2.5 ermöglich das Anlegen von Benutzern über DSQL, allerdings wird dazu eine FBConnection benötigt und damit muss die Datenbank vorhanden sein. Ist sie zu dem Zeitpunkt aber noch nicht, da der Benutzer der diese anlegen soll ja noch nicht einmal existiert.

Möglichkeit 2: Service API. Ich nutze FBLib, die hat eine Service Komponente, allerdings kann die AddUser Methode keine Grant Option vergeben.

Möglichkeit 3: Ich nutze FBLib ohne Grant Option, lege die DAtenbank mit dem neuen Benutzer an, verpasse diesem nachträglich die Grant Option auf Security und angelegter Datenbank im nachhinein über den SYSDBA. Würde, ersteinmal theoretisch gehen (müsste ich mal testen). Empfinde ich aber als reichlich kompliziert. Evtl. gibt es ja eine einfachere Methode...

Ich konnte keine FB-Komponenten finden, die sonst noch die Service API unterstützen und einen Benutzer mit Grant Option anlegen können, vielleicht irre ich mich aber auch oder es gibt noch eine andere mögliche Lösung.

Ich vermute mal, die meisten liefern eine leere Datenbank einfach mit, das möchte ich aber nicht. Ist also keine Option.

Vielen Dank für Eurer Interesse und Hilfe.


EDIT: Das Problem ist gelöst. Möglichkeit 3 funktioniert, wenn man bei Nutzung von FBConnection.ExecuteDirect.. danach auch noch ein Commit auf die Transaction macht. Die Service API selbst ermöglicht keine weiteren AddUser Methoden oder Parameter. Also muss der Admin Benutzer erst so angelegt werden, dann wird mit dem Benutzer die DB angelegt und danach per SQL die Grants auf Security und neuer Datenbank gelegt. Wichtig, wenn man sich mit dem neuen Benutzer an der Datenbank anmeldet, dann mit der RDB$ADMIN role. Im Anhang ein Testprogramm, bei der man sich das anschauen kann.


Gruß
Antonio
Dateianhänge
TestDBScript.7z
Testprogramm.
(129.79 KiB) 83-mal heruntergeladen

Antworten