![]() |
Datenbank: Firebird • Version: 3 • Zugriff über: Seattle
Nicht mit SYSDBA arbeiten, aber wie sonst?
Nicht mit SYSDBA arbeiten, aber wie sonst?
Hallo, die Hinweise unter Firebird nicht mit dem SYSDBA-User zu arbeiten und das Kennwort sofort nach der Installation zu ändern sind nicht zu übersehen. Am Anfang erleichtert es sicherlich den Einstieg es doch erst mal damit zu belassen. Die Phase habe ich nun hinter mir und möchte doch gerne eine Umgebung aufbauen, wie man sie auch später bei einem Kunden ausliefern wird. Da fehlt mir allerdings immer noch der Überblick wie man da eigentlich vorgeht. Man muss ja davon ausgehen, dass die Datenbank und die Anwendung von einer IT-Person des Kunden installiert wird. Ergo muss alles soweit vorbereitet sein, dass diese Person in einem Install-Programm einen beliebigen Usernamen und ein Passwort verwenden kann, mit dem dann das Installationsprogramm die eigentliche Firebird-Datenbank anlegt. Gehen wir mal davon aus der Kunde hat keine Firebird-Infrastruktur aufzuweisen. Dann hat man die Situation, dass direkt nach der Installation von Firebird der User "SYSDBA" mit dem wohlbekannten Kennwort aktiv ist. Dann würde das Installationsprogramm also die IT-Person "SYSDBA" und "masterkey" eingeben lassen und das Installationsprogramm würde mindestens einen weiteren neuen User anlegen, besser zwei. Mal ein wenig Pseudocode:
Delphi-Quellcode:
Allerdings sind das nun zwei Firebird-User die nicht sonderlich viel können, auf jeden Fall keine Datenbank anlegen, keine Tabellen etc (das "ibSecurity.ARoleName := 'ADMIN';" bringt nix, vllt. ist es aber auch falsch). Sinn und Zweck soll ja sein, dass eine FB-Datenbank angelegt wird, wo prinzipiell nur jemand von der IT-Abteilung des Kunden drauf kann (das wäre in meinem obigen Beispiel der user "CUSTOMER") und natürlich wir als Hersteller auch, das wäre der user "MARKUSD". Das Kennwort für den user "CUSTOMER" teilt man der IT-Person mit, falls der sich genötigt sieht, mal in die Datenbank zu schauen. Unser Kennwort erfährt niemand. Da ich mich mit den weitreichenden Rechten in einer FB-Datenbank noch nicht auskenne, weiß ich noch nicht, ob es notwendig ist der IT-Person beschränkte Rechte zu erteilen. Aber wenn es einen eigenen User gibt, dann kann man das tun, wenn es sinnvoll erscheint.
procedure CheckAndCreateUser(const aUserName, aPassword, aFirstName, aMiddleName, aLastName : AnsiString);
{ Prüft ob der User »aUserName« schon in der Securitydatenbank angelegt ist. Wenn nicht, wird der User »aUserName« mit den Angaben aus »aPassword«, »aFirstName«, »aMiddleName« und »aLastName« angelgt. } begin ibSecurity.AUserName := aUserName; ibSecurity.DisplayUser; if ibSecurity.AFirstName = '' then begin ibSecurity.AUserName := aUserName; ibSecurity.APassword := aPassword; ibSecurity.AFirstName := aFirstName; ibSecurity.AMiddleName := aMiddleName; ibSecurity.ALastName := aLastName; ibSecurity.ARoleName := 'ADMIN'; ibSecurity.AddUser; end; end; ibSecurity.DriverLink := FDPhysFBDriverLink; ibSecurity.UserName := 'SYSDBA'; ibSecurity.Password := 'masterkey'; ibSecurity.Host := ''; CheckAndCreateUser('CUSTOMER', 'geheim', 'Max', 'M.', 'Mustermann'); // Das ist der Account für die IT-Person des Kunden CheckAndCreateUser('MARKUSD', 'ganzgeheim', 'Markus', '', 'D'); // Das ist der Account für uns, den Hersteller der Applikation Wie lege ich nun, vorzugsweise mit Delphi, einen FB-User an, der rechtemäßig so ausgestattet ist, dass er dann eine Datenbank anlegen kann? Wie man einen User per Hand mit SQL anlegt weiß ich:
Delphi-Quellcode:
Aber wenn ich das so nackt im ISQL absetze kriege ich die Meldung:
CREATE USER MARKUSD PASSWORD 'ganzgeheim' FIRSTNAME 'Markus' LASTNAME 'D' ACTIVE GRANT ADMIN ROLE;
Delphi-Quellcode:
Was müsste man denn im ISQL erst mal tun, um dann berechtigt zu sein, ein "CREATE USER ..." überhaupt abesetzen zu dürfen? Solche trivial anmutenden Fragen werden leider in der Lektüre "The Firebird Book" von Helen Borrie nicht erklärt, was ziemlich enttäuschend ist.
Use CONNECT or CREATE DATABASE to specify a database
in gsec funktioniert zumindest das:
Delphi-Quellcode:
Aber auch das nutzt nix, wenn ich dann versuche mit dem User "MARKUSD" eine Datenbank zu erzeugen:
C:\Program Files\Firebird\Firebird_3_0>gsec -user sysdba -password masterkey
*** gsec is deprecated, will be removed soon *** GSEC> add MARKUSD -pw ganzgeheim -fname MARKUS -lname D -admin yes GSEC> quit C:\Program Files\Firebird\Firebird_3_0>
Delphi-Quellcode:
schlägt das fehl:
CREATE DATABASE 'P3400M-W10/3050:C:\AM\Client\BLL\AM_FB_CLIENT.FDB'
USER 'MARKUSD' PASSWORD 'ganzgeheim' PAGE_SIZE 16384 DEFAULT CHARACTER SET UTF8 COLLATION UTF8; COMMIT; Unsuccessful execution caused by system error that does not preclude successful execution of subsequent statements. Error loading plugin Engine12. Module C:\Program Files\Firebird\Firebird_3_0\plugins/Engine12 exists but can not be loaded. Vielen Dank im Voraus. Gruß, Markus |
AW: Nicht mit SYSDBA arbeiten, aber wie sonst?
Ab Firebird 3 kann man die Benutzer auch in der Nutzdatenbank oder getrennten Datenbank verwalten.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz