Limitare sa, ovvero... ancora Logon Trigger

di Luca Bianchi, in SQL Server,

In un post precedente avevo già parlato dei Logon Trigger, che saranno introdotti con il SP2 di SQL Server 2005, mostrando un esempio di come si possa limitare il numero di connessioni che ciascun account può aprire.

E' possibile utilizzare un Logon Trigger anche per controllare l'origine di una connessione; ad esempio con il trigger seguente si concede l'accesso ad sa solo se la connessione ha origine da una determinata macchina

CREATE TRIGGER tr_LimitSA
ON ALL SERVER
FOR LOGON
AS
BEGIN
IF SYSTEM_USER = 'sa' AND HOST_NAME() <> 'URANUS'
ROLLBACK;
END;
GO

Volendo estendere l'idea e consentire l'esecuzione di attività amministrative solo se la connessione proviene da una determinata subnet potremmo utilizzare la DMV sys.dm_exec_connections e testare il campo client_net_address come nell'esempio che segue

CREATE TRIGGER tr_LimitSysAdmin
ON ALL SERVER
WITH EXECUTE AS SELF
FOR LOGON
AS
BEGIN
IF IS_SRVROLEMEMBER ('sysadmin', ORIGINAL_LOGIN()) = 1 AND
NOT EXISTS (SELECT 1
FROM sys.dm_exec_connections
WHERE session_id = @@spid
AND (client_net_address = '<local machine>'
OR client_net_address LIKE '172.16.12.%'))
ROLLBACK;
END;
GO

Come si vede ho utilizzato l'execution context (EXECUTE AS) per far eseguire il trigger nel contesto di sicurezza del creatore del modulo; lasciando l'impostazione di default (EXECUTE AS CALLER) avremmo dovuto concedere al ruolo public il permesso "VIEW SERVER STATE" necessario per utilizzare la DMV.

Bye

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Nella stessa categoria
I più letti del mese