Gyorsan jogot az összes tárolt eljárásra

Éppen építem a félautomata SQL Servert (mint már párszor említettem), és ennek egyik állomása az, hogy a szakmailag kevéssé felkészült, ámde elszánt fejlesztők ellen, akik hibernate-ben mindent összedobálnak, elveszem az alkalmazások dbo jogát, és helyette csak írni-olvasni tudnak majd. Ez jó ötlet, hiszen ott van a beépített db_datareader és db_datawriter role minden adatbázisban, de…

A problémát a tárolt eljárások és függvények okozzák, amelyekhez külön-külön kell jogot grantolni. Ezt persze lehet scriptből is, de azért elég jó esély van arra, hogy ezt el fogom izélni valamikor, és nem lesz joga az alkalmazás usernek vmit csinálni, mire azt mondják, hogy azonnal adjam vissza a dbo jogot. Ennek a problémának a kivédésén agyaltam, és már-már kezdtem hajlani a DDL triggerek felé (minden SP gyártás után automatikusan adjuk rá jogot a megfelelő usernek), amikor egy számomra sokkal szimpatikusabb ötletbe botlottam.

Hozzunk létre egy új role-t, és az új role-nak grantoljunk execute jogot a dbo schema-n (ha van más séma használatban, akkor azon is). Ez azt jelenti, hogy egy háromsoros scriptet kell lefuttatnom a model adatbázison, az adatbázis generáló scriptemhez pedig egy sort kell hozzáadnom, és már kész is vagyok. A háromsoros script a modelhez:

CREATE ROLE db_spexecution AUTHORIZATION dbo
GO
GRANT EXECUTE ON SCHEMA::[dbo] TO db_spexecution

A plusz egy sor az adatbázis gyártáshoz:

sp_addrolemember 'db_spexecution', 'dbusername'

Mivel a függvényekhez is execute jog kell, megoldottam a kívánságaimat. Remélem. Teszt következik… :)

Leave a comment