SQL Stored Procedure mit Zertifikat

Aus MyWiki
Zur Navigation springen Zur Suche springen

Benötigt ein Benutzer Rechte auf System Views oder System Tabellen kann man ihm den Zugriff darauf über eine Stored Procedure gewähren.
Damit hat der Benutzer nur das spezifische Recht, das in der Stored Procedure verwendet wird und benötigt keine SA oder "VIEW SERVER STATE" Rechte Die Stored Procedure bekommt ein CERTIFICATE LOGIN und dieser Login bekommt das SA oder VIEW SERVER STATE Recht Der Benutzer bekommt nur das Recht, die Stored Procedure auszuführen und diese wird dann als der CERTIFICATE LOGIN ausgeführt

Um das einzurichten, wechselt man in die master Datenbank:

USE master
GO

Erstellt die Stored Procedure - in diesem Fall wird eine System View verwendet, die nur mit VIEW SERVER STATE Rechten funktioniert

CREATE PROC [sp_dm_tran_session_transactions] AS
BEGIN
   SELECT COUNT(*) 
     FROM SYS.DM_TRAN_SESSION_TRANSACTIONS
     WHERE IS_USER_TRANSACTION = 1
END;
GO

Erstellt das Zertifikat und sichert es mit einem Passwort

CREATE CERTIFICATE crt_dm_tran_session_transactions
    ENCRYPTION BY PASSWORD= '<PASSWORT>'
    WITH SUBJECT ='Certificate zum Abrufen von SYS.DM_TRAN_SESSION_TRANSACTIONS',
    START_DATE = '20181104',EXPIRY_DATE = '20501105'


Jetzt wird der LOGIN mit dem Zertifikat erstellt. Es wird kein User in der master Datenbank erstellt, sondern nur der LOGIN

CREATE LOGIN user_dm_tran_session_transactions FROM CERTIFICATE crt_dm_tran_session_transactions

Nun bekommt der CERTIFICATE LOGIN das Recht für VIEW SERVER STATE

GRANT VIEW SERVER STATE TO user_dm_tran_session_transactions

Die Signatur wird der Stored Proecdure zugewiesen

ADD SIGNATURE TO [sp_dm_tran_session_transactions] BY CERTIFICATE crt_dm_tran_session_transactions
       WITH PASSWORD ='<PASSWORT>'

Als letztes gibt man dem Benutzer das EXECUTE Rechte für die Stored Procedure

GRANT EXECUTE ON sp_dm_tran_session_transactions TO meinUser