Pentru aplicațiile bazei de date, este adesea necesar ca accesul la tabelele și obiectele care stau la baza în schema de aplicații să fie realizat utilizând proceduri sau vederi la nivel de intrare. Acest lucru este necesar pentru ca utilizatorii finali să aibă acces la obiecte la nivel de intrare care pot accesa obiecte de bază în numele utilizatorului. Astfel, nu este necesar să se ofere utilizatorilor finali acces la toate obiectele din schema aplicației. Această abordare are două obiective.
- Aceasta simplifică gestionarea permisiunilor prin faptul că acest control este efectuat numai pe un subset mic de obiecte, mai degrabă decât pe toate obiectele din schema de aplicații.
- De la utilizator, puteți ascunde aspectul schemei principale, deoarece sunt furnizate doar punctele de intrare.
Se formează un rezumat de date pentru a semna datele, această cheie fiind criptată cu o cheie publică, iar valoarea comprimată criptată este atașată datelor. Pentru a verifica semnătura, verificatorul utilizează cheia privată a deținătorului de semnături pentru a decripta valoarea comprimată criptată atașată la date. Examinatorul apoi compară valoarea comprimată decriptată cu valoarea comprimată calculată pe datele asociate. Este important ca atât semnatarul, cât și verificatorul comprimării datelor să utilizeze aceeași funcție hash.
Modulele de semnare ar trebui utilizate numai pentru a acorda permisiuni și niciodată - pentru a interzice sau a revoca permisiunile.
Să presupunem că accesul la vizualizarea sys.sysprocesses ar trebui să fie efectuat utilizând procedura stocată usp_sysprocesses. Utilizatorii pot accesa datele de vizualizare sys.sysprocesses numai prin procedura usp_sysprocesses. Deoarece obiectele usp_sysprocesses și sys.sysprocesses au proprietari diferiți, lanțurile de proprietate nu sunt aplicabile.
Mai întâi, trebuie să creați un certificat din perechea de chei de pe server utilizând instrucțiunea CREATE CERTIFICATE. Apoi, certificatului i se acordă permisiuni de selectare din tabela sys.sysprocesses. Dar, deoarece serverul SQL Server acordă numai permisiuni membrilor, trebuie mai întâi să creați o autentificare utilizând instrucțiunea CREATE LOGIN din certificat. Această autentificare nu necesită permisiuni de conectare pe server, deoarece este doar un substituent pentru permisiuni și nu are intenția de a se conecta la instanța serverului. Această autentificare asociată certificatului poate avea apoi o permisiune de SELECT pentru tabela sys.sysprocesses utilizând instrucțiunea GRANT VIEW SERVER STATE TO. După crearea procedurii memorate usp_sysprocesses, această procedură stocată poate fi semnată cu un certificat (de fapt - o cheie privată corespunzătoare acestui certificat) din instrucțiunea ADD SIGNATURE. Se creează un nou rol, care are permisiunile de a executa procedura usp_sysprocesses stocată. Ca rezultat, utilizatorii care sunt membri ai acestui rol au voie să execute procedura stocată usp_sysprocesses și, prin urmare, permisiunea SELECT pentru a alege din vizualizarea sys.sysprocess. Atunci când unitatea a semnat permisiunile acordate de către participant (folosind instrucțiunea GRANT) și sunt asociate cu certificatul de semnare, operatorul UNION încorporat temporar în token-ul de securitate la timpul de execuție a apelului. După revenirea controlului de execuție, aceste permisiuni sunt eliminate din jetonul de securitate. Astfel, un set suplimentar de permisiuni există numai la timpul de execuție. Orice alt utilizator sau alt rol care are permisiuni EXECUTE la această procedură va avea aceleași capacități.