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
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
- Tempo di commiati, il 4 giugno 2007 alle 15:04
- White paper su vardecimal storage format, il 30 maggio 2007 alle 10:49
- Tools per SQL Server, il 24 maggio 2007 alle 08:34
- Serie di articoli su SSIS, il 17 maggio 2007 alle 08:32
- Non c'è pace per il SP2, il 4 maggio 2007 alle 09:39
- Recuperare informazioni sugli indici, il 29 aprile 2007 alle 19:04