[ johnnyc @ 13.03.2008. 06:50 ] @
pozdrav,

ako mozete da mi objasnite sledece: sa REVOKE uklanjam ranije zadatu permisiju nad objektom?


to prakticno znaci, da ako sam imao definisan GRANT, sa REVOKE cu da povucem taj grant, i imacu DENY?

dok ako sam imao definisan DENY, sa REVOKE cu... sta? da imam GRANT?



sa REVOKE samo povlacim ranije definisanu permisiju, i treba da definisem potpuno novu?

ili mi REVOKE dodje kao da sam definisao DENY na necem sto je ranije bilo definisano sa GRANT?


nigde nisam mogao da nadjem "crno-na-belo" objasnjenje oko ovoga... hvala unapred!

[ Koce @ 13.03.2008. 08:03 ] @
ne, pogresno razmisljas. ako si imao grant (ili deny, svejedno) i uradis revoke, posle toga neces imati nista nad tim objektom! Povukao si samo ovlascenje, nisi dodao suprotno. Posmatraj to kao -1, 0 i 1. Sa revoke to "resetujes" na 0, bez obzira da li si imao grant ili deny (1 ili -1), ok?

P.S. Naravno, sve se odnosi na to da nisi i preko neke druge grupe dodijelio ili oduzeo prava (npr imas rolu sa nekim pravima i korisnik je clan te role i plus si njemu posebno uradio grant ili deny), ako uradis revoke, korisnik ce onda imati ono sto mu pripada kao clanu te grupe.....




[ negyxo @ 13.03.2008. 08:40 ] @
Vidim neko me pretekao ali evo namestio sam mali primer pa se nadam da ce biti jasno



Code:

CREATE TABLE LookAtMe(ID INT PRIMARY KEY, carName NVARCHAR(100))
GO
INSERT INTO LookAtMe VALUES (1, 'BMW')
INSERT INTO LookAtMe VALUES (2, 'Mercedes')
INSERT INTO LookAtMe VALUES (3, 'Opel')
INSERT INTO LookAtMe VALUES (4, 'Ford')
INSERT INTO LookAtMe VALUES (5, 'Fiat')
INSERT INTO LookAtMe VALUES (6, 'Bugati')
GO

CREATE ROLE [FirstRole] AUTHORIZATION [dbo]
GRANT SELECT ON OBJECT::dbo.LookAtMe TO [FirstRole]
GO

CREATE ROLE [SecondRole] AUTHORIZATION [dbo]
DENY SELECT ON OBJECT::dbo.LookAtMe TO [SecondRole]
GO

CREATE LOGIN [MyLogin] WITH PASSWORD=N'none', DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO

CREATE USER [MyUser] FOR LOGIN [MyLogin] WITH DEFAULT_SCHEMA=[dbo]
GO

EXEC sp_addrolemember 'FirstRole', 'MyUser'
GO


Napomena : pre nego sto pokrenes ovaj script, moras imati dozvoljenu SQL autentikaciju i pokrenuti ovo kako sysadmin u managment studio i nemoj zatvarati konekciju.

E sad bi bilo valjda red da dam neko objasnjenje. Ovako, GRANT ti dodeljuje odredjena prava nekom objektu dok ih DENY zabranjuje. DENY uvek ima veci prioritet, sto znaci da ako je nesto stavljeno na DENY, bez obzira sto neki "database principal" ima negde dozvoljen(GRANT) pristup , DENY odnosi prevagu. U ovoj skripti sto sam ti dao kreirace se jedna tabela i popunice se sa nekim podacima, zatim ce se kreirati login i user koji ce ici preko tog login-a, kojem ce se na kraju dodeliti rolovi FirstRole i SecondRole.

Kada pokrenes ovu gore skriptu konektuj se ponovo na server ali sa MyLogin-om i sa sifrom : none

Klinki na New Query i pokreni ovo, i nemoj zatvarati query window:
Code:

SELECT * FROM LookAtMe


zatim se vrati na proslu konekciju (tamo gde si pokrenuo onaj gornji skript) i pokreni ovo
Code:

EXEC sp_addrolemember 'SecondRole', 'MyUser'



Posle ovog vrati se na prosli upit i pokreni ga. Sada bi trebalo da ti je zabranjen pristup. Ako uradis sledecu stvar:

Code:

EXEC sp_droprolemember 'SecondRole', 'MyUser'


i ponovo pokrenes upit - imaces pristup.

Eto, igraj se malo sa ovim i nadam se da ce ti biti jasno.