În mod normal, când creez o procedură stocată, folosesc următoarele ca șablon de sortare
Create procedure <procedurename> <@param1 <type>, @param2 <type>, etc..> as begin <procedure> end
Există o modalitate de a include acordarea permisiunii de executare numai pentru acea procedură stocată în timp ce „mă aflu?
De exemplu, cum ar fi …
Grant execute [User_Execute]
… dar numai pentru această procedură stocată?
Am mai văzut câteva întrebări similare, dar se pare că toate se referă la TOATE procedurile stocate și nu doar la una, nici nu am văzut una unde puteți specifica permisiuni în interiorul scriptului create procedure
. Chiar și răspunsurile despre cum pot seta permisiuni fără interfața grafică pentru anumite proceduri stocate ar fi binevenite.
Editați Răspunsul de sus m-a indicat cu siguranță în direcția corectă; Căutam, nu m-am gândit la setarea comenzilor, ceea ce am făcut, făcând setarea comenzii împreună cu procedura stocată. Oricum, cred că este destul de slick.
Create procedure <procedurename> <@param1 <type>, @param2 <type>, etc..> as begin <procedure> end GO GRANT EXECUTE ON <procedurename> to <username> GO
Comentarii
- Codul furnizat în textul editat este valid și răspunsul corect la această întrebare.
Răspuns
GRANT EXECUTE ON dbo.procname TO username;
Răspuns
tăiați tabelul Permiterea setării pentru obiecte precum procedurile stocate poate fi realizată cu:
GRANT EXECUTE ON <schema>.<object> to <user>;
Cu toate acestea, vă recomandăm să acordați drepturi de securitate la atât la nivel de autentificare, cât și la nivel de utilizator. Veți dori să determinați și să acordați DOAR drepturile necesare pentru obiectele care necesită acces (cum ar fi execuția). Luați în considerare utilizarea funcției EXECUTE AS
care permite suplinirea unui alt utilizator pentru a valida permisiunile necesare pentru executarea codului FĂRĂ să fie nevoie să acordați toate drepturile necesare tuturor obiectelor subiacente (de ex. Mese). EXECUTE AS
poate fi adăugat la procedurile, funcțiile, declanșatoarele stocate etc.
Adăugați codul după cum urmează chiar în cadrul procedurii stocate:
CREATE PROCEDURE dbo.MyProcedure WITH EXECUTE AS OWNER
În acest caz identificați proprietarul modulului care este apelat. Puteți, de asemenea, să vă identificați pe SINE, SAU utilizatorul care creează sau modifică modulul SAU … să apelați CALLER, care va permite modulului să preia permisiunile utilizatorului curent, SAU … să se identifice cu PROPRIETARUL, care va prelua permisiunea proprietarul procedurii care se numește SAU … identificați „nume_utilizator”, care va identifica un anumit utilizator SAU … identificați „nume_conectare” cu va identifica o autentificare specifică.
MAI MULTE ori, veți identifica trebuie doar să acordați EXECUTE
drepturi procs stocate și apoi drepturile sunt acordate tuturor obiectelor la care se face referire în proc. stocate.
În acest fel, NU trebuie să acordați drepturi implicite (exemplu: pentru a actualiza date sau a apela la procese suplimentare). Înlănțuirea proprietății gestionează acest lucru pentru dvs. Acest lucru este util mai ales pentru sql dinamic sau dacă trebuie să creați sarcini de securitate ridicate, cum ar fi CREATE TABLE
. EXECUTE AS
este un instrument util care trebuie luat în considerare pentru acestea.
Acest exemplu vă poate ajuta să clarificați toate acestea:
Creați un utilizator numit NoPrivUser cu acces public la o bază de date (de exemplu, 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
NOTĂ: CREATORUL SAU PROPRIETARUL ACEASTE PROCEDURI VOR CREA CREAREA DREPTURILOR DE TABEL în baza de date țintă.
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.
Cu clauza EXECUTE AS
procedura stocată se execută în contextul proprietarului obiectului. Acest cod creează cu succes dbo.MyTable
și rândurile sunt inserate cu succes. În acest exemplu, utilizatorul NoPrivUser
nu are absolut niciun drept acordat pentru a modifica tabelul sau pentru a citi sau modifica oricare dintre datele din acest tabel.
Este necesar doar cu privire la drepturile necesare pentru a finaliza această sarcină specifică codificată ÎN contextul acestei proceduri.
Această metodă de creare a unor proceduri stocate care pot îndeplini sarcini care necesită drepturi de securitate ridicate fără atribuirea permanentă a acestor drepturi este foarte utilă.
Comentarii
- Acesta este același răspuns pe care l-ați postat ieri pe SO , care De asemenea, a trebuit să formatez pentru lizibilitate.
Răspuns
selectați baza de date de conectare -> Accesați Securable și faceți clic pe butonul Căutare ca în imaginea precedentă. Dacă faceți clic pe butonul Căutare, veți găsi următoarea fereastră pentru a adăuga tipul de obiect.
Faceți clic pe butonul Tipuri de obiecte și veți primi fereastra „Selectați tipuri de obiecte” cu diferite obiecte. Acum, dacă vedeți, procedura stocată este listată în zona tipurilor de obiecte. Acum vom selecta procedura noastră specifică stocată pentru care dorim să oferim permisiunea.
Comentarii
- În primul rând, întrebarea avea peste cinci ani când ați răspuns. Ar fi bine, cu excepția faptului că OP a cerut în mod special soluții care nu ' nu folosesc GUI și pot fi încorporate într-un script. Răspunsul dvs. nu abordează acest lucru.