Általában tárolt eljárás létrehozásakor a következőket használom rendezési sablonként
Create procedure <procedurename> <@param1 <type>, @param2 <type>, etc..> as begin <procedure> end
Van-e mód arra, hogy a végrehajtási engedély megadását csak arra a tárolt eljárásra vonják be, amíg én vagyok benne?
Például, mint például …
Grant execute [User_Execute]
… de csak erre a tárolt eljárásra?
Láttam még néhány hasonló kérdést, de úgy tűnik, hogy ezek mind az összes tárolt eljárásra vonatkoznak, és nem csak egyre, és nem is láttam olyat, ahol megadhat engedélyeket a create procedure
szkript belsejében. Még azok a válaszok is örömmel fogadhatók, hogy miként állíthatok be engedélyeket GUI nélkül bizonyos tárolt eljárásokhoz.
Szerkesztés A legfelsőbb válasz minden bizonnyal a helyes irányba mutatott, lényegében ez kerestem, nem gondoltam a parancsok kötegelésére, amit végül meg is tettem, a parancsot a tárolt eljárásommal együtt kötegeltem. Egyébként úgy gondolom, hogy ez elég csúnya.
Create procedure <procedurename> <@param1 <type>, @param2 <type>, etc..> as begin <procedure> end GO GRANT EXECUTE ON <procedurename> to <username> GO
Megjegyzések
- A szerkesztett szövegben megadott kód érvényes és a kérdésre adott helyes válasz.
Válasz
GRANT EXECUTE ON dbo.procname TO username;
Válasz
tábla csonkolása Az objektumok, például a tárolt eljárások engedélyének beállítása a következő műveletekkel hajtható végre:
GRANT EXECUTE ON <schema>.<object> to <user>;
Biztonsági jogokat azonban megadhat a következő címen is: mind a bejelentkezési, mind a felhasználói szintet. Kizárólag a hozzáférést igénylő objektumokhoz szükséges jogokat szeretné meghatározni és megadni (például végrehajtáshoz). Fontolja meg a EXECUTE AS
képesség használatát, amely lehetővé teszi egy másik felhasználó megszemélyesítését a kód végrehajtásához szükséges engedélyek érvényesítéséhez anélkül, hogy minden szükséges jogot meg kellene adnia az összes mögöttes objektumnak (pl. táblázatok). A EXECUTE AS
hozzáadható a tárolt eljárásokhoz, függvényekhez, aktiválókhoz stb.
Hozzáadhatja a kódhoz a következőképpen a Tárolt eljáráson belül:
CREATE PROCEDURE dbo.MyProcedure WITH EXECUTE AS OWNER
Ebben az esetben a meghívandó modul tulajdonosának adja ki magát. Megadhatja magának, VAGY a modult létrehozó vagy módosító felhasználónak VAGY … imperonate CALLER-t, amely lehetővé teszi a modul számára, hogy felvegye az aktuális felhasználó engedélyeit, VAGY … megszemélyesítheti TULAJDONOSAT, aki megkapja Az eljárás tulajdonosának VAGY hívják … a “felhasználónév” személyazonosságát adja le, amely egy adott felhasználót fog megszemélyesíteni. VAGY … a “bejelentkezési_név” névvel megszemélyesíti a megadott bejelentkezést.
Az idő nagy részében Ön csak EXECUTE
jogokat kell megadnia a tárolt prociknak, majd jogokat kapnak a tárolt procon belül hivatkozott összes objektumra.
Ilyen módon NEM kell adj implicit jogokat (például: adatok frissítésére vagy további procok meghívására). A tulajdonosi láncolás ezt kezeli az Ön számára. Ez különösen hasznos dinamikus sql esetén, vagy ha magasabb szintű biztonsági feladatokat kell létrehoznia, például CREATE TABLE
. A EXECUTE AS
egy hasznos eszköz, amelyet érdemes figyelembe venni.
Ez a példa segíthet mindezek tisztázásában:
Hozzon létre egy NoPrivUser nevű felhasználót a következővel: nyilvános hozzáférés egy adatbázishoz (pl. dbadb):
USE [master]; GO CREATE LOGIN [NoPrivUser] WITH PASSWORD=N"ABC5%", DEFAULT_DATABASE=[dbadb], CHECK_EXPIRATION=ON, CHECK_POLICY=ON; GO USE [DBAdb]; GO CREATE USER [NoPrivUser] FOR LOGIN [NoPrivUser]; GO
MEGJEGYZÉS: A MEGHATÁROZÓ LÉTREHOZÓJA VAGY TULAJDONOSA TÁBLÁZATI JOGOK KÉSZÍTÉSÉT KELL A Céladatbázisban.
use DBAdb go CREATE PROCEDURE dbo.MyProcedure WITH EXECUTE AS OWNER truncate table MyTable GO GRANT EXEC ON dbo.MyProcedure TO NoPrivUser; GO -- Now log into your database server as NoPrivUser and run the following.
A EXECUTE AS
záradékkal a tárolt eljárás az objektumtulajdonos környezetében fut. Ez a kód sikeresen létrehozza a dbo.MyTable
fájlt, és a sorokat sikeresen beszúrja. Ebben a példában a (z) NoPrivUser
felhasználónak nincs semmilyen joga a táblázat módosítására, vagy a táblázat bármely adatának elolvasására vagy módosítására.
Csak ehhez kell az eljárás keretein belül kódolt konkrét feladat végrehajtásához szükséges jogokról.
Nagyon hasznos ez a módszer olyan tárolt eljárások létrehozására, amelyek képesek megnövelt biztonsági jogokat igénylő feladatokat végrehajtani anélkül, hogy véglegesen kiosztanák ezeket a jogokat.
Megjegyzések
- Ez ugyanaz a válasz, amelyet tegnap tettél közzé a SO-n , amely Formáznom kellett az olvashatóság érdekében is.
Válasz
válassza ki az adatbázis bejelentkezést -> Lépjen a Biztonságos elemhez és kattintson a Keresés gombra, mint az előző képen. A Keresés gombra kattintva a következő ablakban találja meg az objektum típusát.
Kattintson az Objektumtípusok gombra, és megjelenik az „Objektumtípusok kiválasztása” ablak különböző objektumokkal. Ha látja, a tárolt eljárás az objektumtípusok területen szerepel. Most kiválasztjuk azt a konkrét tárolt eljárást, amelyhez engedélyt akarunk adni.
Megjegyzések
- Először is, a kérdés több mint öt éves volt, amikor válaszoltál rá. Ez rendben lenne, kivéve, ha az OP kifejezetten olyan megoldásokat kért, amelyek nem ' nem használják a GUI-t, és beágyazhatók egy szkriptbe. Válasza nem foglalkozik ezzel.