2013-10-23 98 views
6

ho creato un utente Firebird (PIPPO) tramite jaybird, segue "display" gsec:utente firebird con privilegi concessi non può accedere alle tabelle

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

creo un ruolo (GESALLDB_USER) in Firebird DB e concesso alcuni privilegi:

 
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> 

concesso questo ruolo al nuovo utente tramite JayBird (ultima riga prima):

il problema è che ogni volta che provo ad eseguire una query ho ricevuto il messaggio:

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

Se concedo direttamente la TABELLA all'utente appena creato, tutto funziona.

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 FINI ATTIVA LAST_USED

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

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

Qualche aiuto su questo?

Grazie Gianluca.

risposta

7

In Firebird i diritti assegnati a un ruolo vengono applicati solo quando tale ruolo viene specificato durante la connessione al database. In altre parole, se un utente ha un ruolo, quell'utente non ottiene automaticamente i diritti di quel ruolo. L'utente deve indicare esplicitamente il ruolo da utilizzare, altrimenti vengono applicati solo i diritti assegnati a PUBLIC e all'utente stesso.

Per ISQL il CONNECT specification è:

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

Così, per l'utilizzo specifico esempio: i nomi

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

Ruolo circondate da virgolette (singole o doppie) sono trattati tra maiuscole e minuscole. Quindi l'utilizzo di role 'gesalldb_user' non corrisponderà a un ruolo GESALLDB_USER, mentre lo sarà role gesalldb_user. Questo è come le regole per altri nomi oggetto con doppia quotatura (come tabella e nomi di colonne) in Firebird.

Questo si applica anche quando si utilizza un driver o un componente di accesso, ma la configurazione esatta e il nome della proprietà potrebbero variare (ad esempio per Jaybird la proprietà è roleName o sqlRole).

+0

Fatto come suggerisce lo stesso risultato: 'SQL> connect "C: \ Users \ teiluke \ documenti \ ondulati \ DB \ prova \ gesalldb.fdb" utente "pippo" password "topolino" ruolo "gesalldb_user"; Versione server: WI-V2.5.2.26540 Firebird 2.5 Database: "c: \ utenti \ teiluke \ documenti \ ondulati \ db \ prova \ gesalldb.fdb", Utente: pippo, Ruolo: gesalldb_user SQL> selezionare * dagli anelli; Istruzione fallita, SQLSTATE = 28000 nessuna autorizzazione per lettura/selezione accesso a TABLE ANELLI SQL> show grant; /* Concedere le autorizzazioni per questo database */ . . . GRANT GESALLDB_USER TO PIPPO ' –

+0

@GianlucaPasqualato Strano, proverò a riprodurre questo e vedere se ho perso qualcosa. –

+0

@GianlucaPasqualato L'ho appena testato e il ruolo è sensibile al maiuscolo/minuscolo quando circondato da virgolette (singole o doppie), quindi l'uso di 'ruolo 'gesalldb_user'' non funziona, ma usando' role' GESALLDB_USER'' o 'role gesalldb_user' funzionerà. –