[ galisnik @ 12.11.2007. 21:29 ] @
Verzija Firebirda je 1.5.x
Uskladištena procedura ima select na tabelu RDB$RELATIONS (dakle sistemsku), a user nije sysdba. Iako je tom useru (tačnije ROLE-i čiji je on član) dodjeljen GRANT za izvršenje te procedure, FB javlja grešku da taj user nema privilegiju da je izvrši. Kako se to rješava, može li to uopše u FB 1.5 (ne igra mi 2.0 verzija, čak i ako ima rješenje za to u toj verziji)

Hvala unaprijed
[ savkic @ 13.11.2007. 10:05 ] @
> Uskladištena procedura ima select na tabelu RDB$RELATIONS (dakle sistemsku), a user nije sysdba. Iako je tom useru (tačnije ROLE-i čiji je on član)
> dodjeljen GRANT za izvršenje te procedure, FB javlja grešku da taj user nema privilegiju da je izvrši. Ka

I sama procedura mora imati prava nad objektima koje koristi, dakle ako koristi tabele mora se dodeliti odgovarajuće pravo proceduri nad tim tabelama.
GRANT SELECT ON TABELA TO PROCEDURE NAZIV_PROCEDURE. Ako koristiš samo određene kolone iz tabele, grant možeš dodatno ograničiti na samo te kolone.
[ galisnik @ 13.11.2007. 11:53 ] @
Hvala na odgovoru, medjutim, i dalje se FB buni zbog privilegija na sistemsku tabelu.
Imam sledece uradjeno kao SYSDBA:
CREATE ROLE R;
GRANT U TO R; /*U je user na tom serveru*/
GRANT SELECT ON RDB$RELATIONS TO SP;
/*imam procedure SP koja poziva:
select RDB$RELATION_NAME from RDB$RELATIONS where RDB$RELATION_NAME starting with 'TMP_' into :tmp
i kasnije: execute STATEMENT 'DROP TABLE ' || :tmp
*/
GRANT EXECUTE ON PROCEDURE SP TO R;

Ovo sad pokusava user U:
EXECUTE PROCEDURE SP;
/*
Message: isc_dsql_execute2 failed

SQL Message : -551
This user does not have privilege to perform this operation on this object.

Engine Code : 335544352
Engine Message :
no permission for execute access to PROCEDURE SP
*/

Evidentno je da Role R nema pravo da obrise tabelu, a ja sam zbunjen jer taj user U je uredno kreira sa CREATE TABLE, i kao vlasnik te tabele ne znam zasto je ne moze i obrisati.

Kao alat za administraciju koristim FlameRobin.
[ savkic @ 13.11.2007. 13:36 ] @
> SQL Message : -551
> This user does not have privilege to perform this operation on this object.

Ako izbaciš DROP TABLE onda radi?

> Evidentno je da Role R nema pravo da obrise tabelu, a ja sam zbunjen jer taj user U je uredno kreira sa CREATE TABLE, i kao vlasnik te tabele
> ne znam zasto je ne moze i obrisati.

Ako se dobro sećam za EXECUTE STATEMENT važe nešto drugačija pravila za prava pristupa. Međutim ako si ti owner tih objekata (tabela i procedura) onda ti prava i ne trebaju.

> select RDB$RELATION_NAME from RDB$RELATIONS where RDB$RELATION_NAME starting with 'TMP_' into :tmp

Imaj na umu da ovo neće raditi ako ima više tabela koje počinju sa TMP_, bolje je da napišeš sa FOR SELECT.