2013-10-23 20 views
6

ich einen Firebird Benutzer erstellt (PIPPO) über jaybird, folgt gsec „Anzeige“:Firebird Benutzer mit Privilegien nicht Tabellen zugreifen können

 
GSEC> di 
    user name     uid gid admin  full name 
------------------------------------------------------------------------------------------------ 
SYSDBA        0  0   Sql Server Administrator 
PIPPO        0  0   GesAll 1.0 User 
GSEC> 

ich eine Rolle (GESALLDB_USER) in Firebird DB erstellen und einige Privilegien gewährt:

 
SQL> show grant; 

/* Grant permissions for this database */ 
GRANT DELETE, INSERT, SELECT, UPDATE, REFERENCES ON ANELLI TO ROLE GESALLDB_USER 

GRANT DELETE, INSERT, SELECT, UPDATE, REFERENCES ON COPPIE TO ROLE GESALLDB_USER 

GRANT DELETE, INSERT, SELECT, UPDATE, REFERENCES ON COVE TO ROLE GESALLDB_USER 
GRANT DELETE, INSERT, SELECT, UPDATE, REFERENCES ON DATI_CONFIGURAZIONE TO ROLE GESALLDB_USER 
GRANT DELETE, INSERT, SELECT, UPDATE, REFERENCES ON DATI_COVE TO ROLE GESALLDB_USER 
GRANT DELETE, INSERT, SELECT, UPDATE, REFERENCES ON DATI_SOGGETTI TO ROLE GESALLDB_USER 
GRANT DELETE, INSERT, SELECT, UPDATE, REFERENCES ON DEPOSIZIONI TO ROLE GESALLDB_USER 
GRANT GESALLDB_USER TO PIPPO 
SQL> 

diese Rolle auf den neuen Benutzer über jaybird (letzte Zeile vor) gewährt:

das Problem ist, dass wenn ich versuche, eine Abfrage ich die Nachricht zu laufen bekam:

 
SQL> select * from anelli; 
Statement failed, SQLSTATE = 28000 
no permission for read/select access to TABLE ANELLI 
SQL> 

Wenn ich dem neu erstellten Benutzer direkt die TABLE gewähre, funktioniert alles.

SQL> grant all on anelli to pippo; 
SQL> show grant; 

/* Grant permissions for this database */ 
GRANT DELETE, INSERT, SELECT, UPDATE, REFERENCES ON ANELLI TO ROLE GESALLDB_USER 

GRANT DELETE, INSERT, SELECT, UPDATE, REFERENCES ON ANELLI TO USER PIPPO 

SQL> connect "C:\Users\teiluke\Documents\Ondulati\DB\prova\gesalldb.fdb" user "p 
ippo" password "topolino"; 
Commit current transaction (y/n)?y 
Committing. 
Server version: 
WI-V2.5.2.26540 Firebird 2.5 
WI-V2.5.2.26540 Firebird 2.5/XNet (E7441EA1CA2CF4)/P12 
WI-V2.5.2.26540 Firebird 2.5/XNet (E7441EA1CA2CF4)/P12 
Database: "C:\Users\teiluke\Documents\Ondulati\DB\prova\gesalldb.fdb", User: pi 
ppo 
SQL> select * from anelli; 

progressivo FEDERAZIONE RNA TIPO ANNO INIZIO FINE ATTIVA LAST_USED

============ =========== ====== ====== ====== ============ ============ ====== =

 1 FOI   89LR E  2012    1   100 N 
     0 
     2 FOI   89LR E  2013    1   100 S 
    41 

Irgendwelche Hilfe dazu?

Danke Gianluca.

Antwort

7

In Firebird werden die einer Rolle zugewiesenen Rechte nur dann angewendet, wenn diese Rolle bei der Verbindung mit der Datenbank angegeben wird. Mit anderen Worten, wenn ein Benutzer eine Rolle hat, erhält dieser Benutzer nicht automatisch die Rechte dieser Rolle. Der Benutzer muss die zu verwendende Rolle explizit angeben, andernfalls gelten nur die Rechte, die PUBLIC zugewiesen sind, und der Benutzer selbst.

Für ISQL die CONNECT specification ist:

CONNECT database name [user username] [password password] [role role_name]; 

Also für Ihre speziellen Beispiel Verwendung:

SQL> connect "C:\Users\teiluke\Documents\Ondulati\DB\prova\gesalldb.fdb" user "p 
ippo" password "topolino" role GESALLDB_USER; 

Rollennamen von (Einzel- oder Doppelzimmer) Anführungszeichen umgeben sind Groß- und Kleinschreibung behandelt. So role 'gesalldb_user' wird keine Rolle GESALLDB_USER entsprechen, während role gesalldb_user wird. Dies entspricht den Regeln für andere doppelt zitierte Objektnamen (wie Tabellen- und Spaltennamen) in Firebird.

Dies gilt auch, wenn eine Treiber- oder Zugriffskomponente verwendet wird, aber die genaue Konfiguration und der Name der Eigenschaft variieren (z. B. für Jaybird ist die Eigenschaft roleName oder sqlRole).

+0

Erledigt als vorgeschlagen dasselbe Ergebnis: 'SQL> verbinden "c: \ Benutzer \ teiluke \ Dokumente \ ondulati \ DB \ prova \ gesalldb.fdb" Benutzer "pippo" Passwort "topolino" Rolle "gesalldb_user"; Serverversion: WI-V2.5.2.26540 Firebird 2.5 Datenbank: "c: \ Benutzer \ teiluke \ Dokumente \ ondulati \ db \ prova \ gesalldb.fdb", Benutzer: pippo, Rolle: gesalldb_user SQL> select * von Anelli; Anweisung fehlgeschlagen, SQLSTATE = 28000 keine Berechtigung zum Lesen/Auswählen von Zugriff auf TABELLE ANELLI SQL> show grant; /* Erteilen Sie Berechtigungen für diese Datenbank */ . . . GRANT GESALLDB_USER TO PIPPO ' –

+0

@ GianlucaPasqualato Seltsam, ich werde versuchen, dies zu reproduzieren und sehen, ob ich etwas verpasst habe. –

+0

@GianlucaPasqualato Ich habe es gerade getestet, und die Rolle ist case sensitive, wenn sie von (einfachen oder doppelten) Anführungszeichen umgeben ist, so dass 'rolle 'gesalldb_user'' nicht funktioniert, aber mit' role' GESALLDB_USER'' oder 'role gesalldb_user' wird funktionieren. –