C# - MS SQL tárolt eljárások

MS SQL tárolt eljárások 11. rész

forráskód letöltése
Az MS SQL-ben használhatunk ún. szerepeket, amelyeket leginkább a Windows NT-ben megszokott felhasználói csoportokhoz hasonlíthatunk. A szerepek használatával nagymértékben megkönnyíthetjük az SQL szerver kezeléséhez kapcsolódó rendszergazdai feladatokat. Ebben a részben azokat a tárolt eljárásokat vesszük sorra, amelyek a szerepek kezeléséhez kapcsolódnak.
1_sp_addrole.sql: Új szerep létrehozása
Új szerepet az sp_addrole tárolt eljárással hozhatunk létre. Az eljárás szintaxisa a következő:
sp_addrole [ @rolename = ] 'role' [ , [ @ownername = ] 'owner' ]
Az eljárás paraméterei:
rolename
Az új szerep nevét kell megadnunk ebben a paraméterben. A nevet kötelezően meg kell adnunk, valamint figyelni kell arra, hogy ez az adatbázison belül egyedi legyen.
ownername
Ebben az opcionális paraméterben adhatjuk meg a szerep tulajdonosának nevét. Ha elhagyjuk, akkor a dbo felhasználó lesz a tulajdonos. Megadhatunk olyan Windows NT felhasználót is, amelyet az SQL Server ismer (az sp_grantdbaccess tárolt eljárással fel lett véve).
Az eljárás visszatérési értéke 0, ha a művelet sikerült, és 1, ha nem.
2_sp_addrolemember.sql: Tag felvétele a szerepbe
Egy szerepnek akkor van értelme, ha ahhoz tagok is tartoznak. Az sp_addrolemember tárolt eljárással tagokat rendelhetünk hozzá a szerepekhez. Az eljárás szintaxisa a következőképpen néz ki:
sp_addrolemember [ @rolename = ] 'role' , [ @membername = ] 'security_account'
Az eljárás paraméterei:
rolename
Ebben a paraméterben kell megadnunk a szerep nevét. Nem hagyható el.
membername
Ebben a paraméterben adhatjuk meg a felhasználó vagy csoport nevét, amelyet hozzá akarunk rendelni a szerephez. Amikor a hozzáadás megtörténik, a szerep örökli a hozzáadott tag jogait. Szerepet is hozzáadhatunk egy másik szerephez, de ilyenkor nem hozhatunk létre körkörös hivatkozásokat. Ez azt jelenti, hogy ha egy szerep tagja egy másik szerepnek, akkor a másik szerep ennek nem lehet tagja.
A tag lehet egy adatbázis, vagy Windows NT felhasználó, illetve egy másik szerep.
3_sp_helprole.sql: Szerepek adatainak lekérdezése
Az adatbázisban lévő szerepek adatait az sp_helprole tárolt eljárással kérdezhetjük le. Ennek szintaxisa a következő:
sp_helprole [ [ @rolename = ] 'role' ]
A rolename paraméterben adhatjuk meg a kérdéses szerep nevét. Ha ezt elhagyjuk, akkor az adatbázisban szereplő összes szerep adatai listázásra kerülnek. Az adatokat egy eredménylistában kapjuk meg. Az eredménylista három oszlopból áll, melyek a következők:
  • RoleName: a szerep neve;
  • RoleId: a szerep egyedi azonosítója;
  • IsAppRole: a szerep típusa.
4_sp_helprolemember.sql: Szerephez tartozó tagok lekérdezése
Az sp_helprole tárolt eljárás csak korlátozott információkat ad a szerepekről. Az sp_helprolemember tárolt eljárással viszont lehetőségünk van lekérdezni a szerep tagjait is. Az eljárás szintaxisa a következőképpen néz ki:
sp_helprolemember [ [ @rolename = ] 'role' ]
A rolename paraméterben adhatjuk meg a kérdéses szerep nevét. Ha ezt nem tesszük meg, akkor az összes olyan szerep listázásra kerül, amelynek legalább egy tagja van.
Az eljárás egy eredménylistát ad, amely három oszlopból áll:
  • DbRole: a szerep neve;
  • MemberName: a szerep tagjának neve;
  • MemberSID: a tag biztonsági azonosítója (bináris adat!).
5_sp_droprolemember.sql: Tag törlése a szerepből
Ha egy tagot törölni szeretnénk egy szerepből, akkor ezt az sp_droprolemember eljárással tehetjük meg. Az eljárás szintaxisa:
sp_droprolemember [ @rolename = ] 'role' , [ @membername = ] 'security_account'
Az eljárás paraméterei:
rolename
Annak a szerepnek a nevét adhatjuk meg ebben a paraméterben, amelyből a tagot törölni szeretnénk.
membername
A szerepből törlendő tag nevét kell megadnunk ebben a paraméterben.
6_sp_droprole.sql: Szerep törlése
Ha a szerepet is törölni szeretnénk, akkor ezt az sp_droprole tárolt eljárással tehetjük meg. Egy szerepet csak akkor törölhetünk, ha annak nincsen egyetlen tagja sem (előzőleg az összes tagot törölni kell az sp_droprolemember eljárással).
Az eljárás szintaxisa:
sp_droprole [ @rolename = ] 'role'
A rolename paraméterben a törlendő szerep nevét kell megadni.
Ha a törlés sikerült, akkor az eljárás visszatérési értéke 0, ellenkező esetben 1.

MS SQL tárolt eljárások cikksorozat