„Auto“ – Grants für Generatoren und Exceptions in FB 3

Da ich in den letzten Monaten diverse Projekte von Firebird 2 auf Firebird 3 portiert habe, mussten auch einige Anpassungen an den diversen Datenbanken selbst vorgenommen werden. z.B.: Grants für Generatoren und Exceptions. Siehe auch: https://mathiaspannier.wordpress.com/2016/08/25/umstellung-einer-datenbank-auf-firebird-3/
Allerdings habe ich festgestellt, dass die Benutzung von Exceptions/Generatoren in Firebird 3 auch ohne zusätzlichen Grant funktioniert wenn man ein Firebird 2 Backup auf einem Firebird 3 Server wiederherstellt. Bei der Erstellung der Datenbank über ein SQL Skript ist das nicht so.

Zum Testen habe ich ein kleines SQL Skript erstellt welches eine Tabelle und einen Generator erstellt (Siehe weiter unten). Wird das Skript auf einem Firebird 2 Server ausgeführt so kann der Benutzer „PANNIER“ Datensätze einfügen (und den Generator benutzen). Lasse ich dasselbe Skript auf einem Firebird 3 Server laufen so erhalte ich beim Einfügen eines Datensatzes eine Fehlermeldung.

connect localhost:c:\temp\demo.fdb user PANNIER password xxxxx;

insert into DEMO_TABLE (DEMO_TEXT) values ('demo');

Statement failed, SQLSTATE = 28000
no permission for USAGE access to GENERATOR GEN_DEMO

Wenn ich die Firebird 2 Datenbank sichere und auf dem Firebird 3 Server wiederherstelle so kann auch der Benutzer „PANNIER“ Datensätze einfügen (ohne expliziten GRANT für den Generator).

Schaut man sich die Grants der Tabelle an, so sieht man, dass das 3er Restore die Berechtigungen für den Generator auf public setzt. Ich vermute das es aus
Gründen der einfachen Migration gemacht wird.

Mit dem nachfolgenden isql Befehl kann man sich alle Grants der Datenbank anzeigen lassen:

connect localhost:c:\temp\demo.fdb user SYSDBA password masterkey;
show grants;

Links im Bild die Backup/Restore Datenbank. Rechts im Bild die Datenbank via Skript.

Hier das vollständige Skript für die Erstellung der Testdatenbank:

SET SQL DIALECT 3;

SET NAMES UTF8;

SET CLIENTLIB 'C:\Program Files (x86)\Firebird\Firebird_3_0\fbclient.dll';
--SET CLIENTLIB 'C:\Program Files (x86)\Firebird\Firebird_2_0\bin\fbclient.dll';

CREATE DATABASE 'localhost:C:\temp\demo.fdb'
USER 'SYSDBA' PASSWORD 'masterkey'
PAGE_SIZE 16384
DEFAULT CHARACTER SET UTF8;

CREATE GENERATOR GEN_DEMO;

CREATE TABLE DEMO_TABLE (
    ID         BIGINT NOT NULL,
    DEMO_TEXT  VARCHAR(10));
ALTER TABLE DEMO_TABLE ADD CONSTRAINT PK_DEMO_TABLE PRIMARY KEY (ID);

SET TERM ^ ;

CREATE TRIGGER DEMO_TABLE_BI0 FOR DEMO_TABLE
ACTIVE BEFORE INSERT POSITION 0
AS
begin
  if (new.ID is null) then
    new.ID = next value for GEN_DEMO;
end
^

SET TERM ; ^

GRANT ALL ON DEMO_TABLE TO PANNIER;

 

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Google Foto

Du kommentierst mit Deinem Google-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s