Triggers de DDL para impedir modificaciones

En muchas ocasiones como DBA’s de una empresa, se nos plantea el problema de restringir a determinados usuario que puedan realizar modificaciones en las estructuras de las bases de datos. Es cierto que se puede hacer configurando permisos, pero tiene el problema de las creaciones de nuevos objetos que habrían de configurarse y ademas es un poco confuso el tratamiento de permisos, o por lo menos lo es para mi que vengo del mundo Oracle. Yo he encontrado otra alternativa.

Yo para esto lo he solucionado con un trigger que controle los eventos DDL de todas las bases de datos. Os dejo el trigger que yo estoy usando por si a alguien le puede servir de ayuda. 

USE [master];
GO
SET ANSI_NULLS ON;
GO
SET QUOTED_IDENTIFIER ON;
GO
IF EXISTS (SELECT * FROM master.sys.server_triggers WHERE parent_class_desc = ‘SERVER’ AND name = N’NODDL’)
BEGIN
DROP TRIGGER [NODDL] ON ALL SERVER;
END;
GO
CREATE TRIGGER [NODDL]
ON ALL SERVER
FOR DDL_EVENTS
AS
BEGIN

SET NOCOUNT ON;
Declare @EventData XML = EVENTDATA();
Declare @AppName sysname;
Declare @User sysname = SUSER_SNAME();
Declare @ErrorText Varchar(5000);

— Averiguamos el programa para controlar que programas pueden realizar acciones
SELECT @AppName = program_name
FROM sys.dm_exec_sessions
WHERE session_id = @@SPID;

— Averiguamos la IP remosta por si queremos controlar por IP quien puede hacer cosas
Declare @ip VARCHAR(32) = (
SELECT client_net_address
FROM sys.dm_exec_connections
WHERE session_id = @@SPID
);

— Montamos el IF deacuerdo a nuestras necesidades para restringir las sentencias DDL
— Programas en los restringimos las sentencias DDL
If (@AppName Like ‘%SQL Manager%’
OR
@AppName Like ‘Toad%’
OR
@AppName Like ‘Microsoft SQL Server Management Studio%’
)
AND
— Especificamos los usuarios que pueden realizar sentencias DDL
(
@user not in (‘PEPE’, ‘102-152vtofino’, ‘vinguel’, ‘vtofino’)
)
Begin

SET @ErrorText = ‘No se puede realizar el comando ‘+@EventData.value(‘(/EVENT_INSTANCE/TSQLCommand)[1]’, ‘NVARCHAR(MAX)’)+’ por el usuario ‘+@user+’.’;
SET @ErrorText = @ErrorText + ‘ Contacte con el Administrador de la base de datos.’
RAISERROR (@ErrorText,
16,
217
);
ROLLBACK;

End;

END;
GO
ENABLE TRIGGER [NODDL] ON ALL SERVER;
GO

Si algo sucedió con nuestra salud, creemos que hay una solución a cualquier enfermedad en una píldora. Hoy en día, alrededor del 35% de los estadounidenses compran medicamentos en línea. A veces los servicios ofrecen a sus clientes Kamagra. Debajo están las decisiones importantes que ustedes son tiene que hacer sobre “http://zithromax.me/es/azitromicina.html“. ¿De qué hablan los proveedores de atención médica “Azitromicina“? No se olvide, considere “a href=”http://zithromax.me/es/azitromicina.html”>Azithromycin“. Después de todo, hay algunas explicaciones y los farmacéuticos son generalmente capaces de identificar su problema a través de pruebas psicológicas. Antes de comprar Kamagra o cualquier otro medicamento, describa a su farmacéutico su condición médica. El médico puede ordenar algunas pruebas para descartar cualquier problema médico que pueda estar contribuyendo a la enfermedad. No tome medicamentos genéricos no deseados. Llévelos a su farmacia local que dispondrá de ellos para ustedes son.


Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Límite de tiempo se agote. Por favor, recargar el CAPTCHA por favor.