AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Nicht mit SYSDBA arbeiten, aber wie sonst?
Thema durchsuchen
Ansicht
Themen-Optionen

Nicht mit SYSDBA arbeiten, aber wie sonst?

Offene Frage von "mkinzler"
Ein Thema von Zwirbel · begonnen am 8. Sep 2016 · letzter Beitrag vom 8. Sep 2016
Antwort Antwort
Zwirbel

Registriert seit: 17. Aug 2009
66 Beiträge
 
Delphi 11 Alexandria
 
#1

Nicht mit SYSDBA arbeiten, aber wie sonst?

  Alt 8. Sep 2016, 19:41
Datenbank: Firebird • Version: 3 • Zugriff über: Seattle
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:
  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
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.

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:

CREATE USER MARKUSD PASSWORD 'ganzgeheim' FIRSTNAME 'Markus' LASTNAME 'D' ACTIVE GRANT ADMIN ROLE; Aber wenn ich das so nackt im ISQL absetze kriege ich die Meldung:

Use CONNECT or CREATE DATABASE to specify a database 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.

in gsec funktioniert zumindest das:
Delphi-Quellcode:
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>
Aber auch das nutzt nix, wenn ich dann versuche mit dem User "MARKUSD" eine Datenbank zu erzeugen:
Delphi-Quellcode:
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;
schlägt das fehl:
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Nicht mit SYSDBA arbeiten, aber wie sonst?

  Alt 8. Sep 2016, 20:57
Ab Firebird 3 kann man die Benutzer auch in der Nutzdatenbank oder getrennten Datenbank verwalten.
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz