[ trodon @ 28.07.2008. 20:28 ] @
Recimo da tabela u bazi ima 3 fielda - field1, field2, field3. Ulogujem se na server kao user kome su stavljene zabrane SELECT-a na fieldove field1 i field2. Kako da selektujem sve kolone iz tabele koje su dozvoljene za odredjenog user-a? Gledao sam mypermissions proceduru, ali ne znam kako da je koristim, i ne znam da li se ovaj problem uopshte reshava na taj nachin?

Unapred hvala na odgovorima...
[ Zidar @ 07.08.2008. 17:07 ] @
Imas generalno dva nacina za ovaj problem.
Nacin 1: ne das nikome prevo da otvori tabelu direktno. Znaci, niko ne moze da uradi "SELECT Field1 FROM MyTable", nema permissions. Onda napravis nekoliko VIEW-a i na njih das prava odredjenim grupama korisnika.

Nacin 2: razbijes tabelu na nekoliko tabela, pa recimo user 'Aca' moze da cita/pise po svim tabelaam, a user 'Maca' moze samo po tabeli A ali ne i po tabeli B.

I jedan i drugi nacin traze da dobro smislis ko sta sme da radi i da ne komplikujes previse. To ti sve preraste u jednu glavobolju za administraciju ali tu se ne moze nista. Zato je MS SQL skup - treba ti administrator i da mislis o ovim stvarima.

:-)
[ Sasa Popovic @ 08.08.2008. 14:48 ] @
Citat:
trodon: Recimo da tabela u bazi ima 3 fielda - field1, field2, field3. Ulogujem se na server kao user kome su stavljene zabrane SELECT-a na fieldove field1 i field2. Kako da selektujem sve kolone iz tabele koje su dozvoljene za odredjenog user-a? Gledao sam mypermissions proceduru, ali ne znam kako da je koristim, i ne znam da li se ovaj problem uopshte reshava na taj nachin?

Unapred hvala na odgovorima...


Mozete da iskoristite sp_column_privileges proceduru da bi ste videli da li trenutni korisnik ima SELECT prava na odredjenoj koloni i da na osnovu toga napravite odgovarajuci SQL upit.
Na primer, mogli bi ste da izvrsite sledeci upit:
Code:

DECLARE @PrivilegedColumns 
      TABLE (
            TABLE_QUALIFIER SYSNAME, 
            TABLE_OWNER SYSNAME, 
            TABLE_NAME SYSNAME, 
            COLUMN_NAME SYSNAME, 
            GRANTOR SYSNAME, 
            GRANTEE SYSNAME, 
            PRIVILEGE VARCHAR(32), 
            IS_GRANTABLE VARCHAR(3))
INSERT INTO @PrivilegedColumns
EXEC sp_column_privileges @table_name = 'MyTable', 
   @column_name = 'MyColumn'

SELECT * FROM @PrivilegedColumns

Odnosno da ga izmenite tako da se iz @PrivilegedColumns tabele proveri da li korisnik ima "SELECT" privilege na zadatoj koloni. Zatim dinamicki napravite SQL upit koji ce izvuci podatke samo iz zeljenih kolona i dinamicki izvrsite SQL upit.

Pozdrav,
Sasa
[ trodon @ 17.08.2008. 11:40 ] @
Hvala puno na pomoci!!!!