No existe, Pero puedes utilizar un disparador (trigger) DDL para capturar el evento "DROP TABLE". Entonces dentro de este trigger puedes verificar quién creó la tabla y quién está intentando eliminarla. Si no son el mismo usuario entonces puedes revertir la operación y le pasas la notificacion.
Aqui te pongo el ejemplo. CREATE TRIGGER PreventDropUnlessOwner ON DATABASE FOR DROP_TABLE AS BEGIN DECLARE @EventData XML = EVENTDATA(); DECLARE @DroppedTableName NVARCHAR(255) = @EventData.value('(/EVENT_INSTANCE/ObjectName)[1]', 'NVARCHAR(255)'); DECLARE @DropperName NVARCHAR(255) = @EventData.value('(/EVENT_INSTANCE/LoginName)[1]', 'NVARCHAR(255)'); DECLARE @TableOwner NVARCHAR(255); SELECT @TableOwner = s.name FROM sys.tables t INNER JOIN sys.schemas s ON t.schema_id = s.schema_id WHERE t.name = @DroppedTableName; IF @TableOwner IS NOT NULL AND @TableOwner @DropperName BEGIN RAISERROR('No puedes eliminar las tablas que los otros han creado.', 16, 1); ROLLBACK; END END;
Es muy probable que sea un problem con la instalacion de SQL Server o algun "driver" en Windows. Trata de apagar la computadora y reiniciarla en "safe mode" luego le haces que Windows repare el error. Aqui esta el enlace: support.microsoft.com/en-us/windows/start-your-pc-in-safe-mode-in-windows-92c27cff-db89-8644-1ce4-b3e5e56fe234
Existe algun permiso en SQL server que permita que un usuario pueda crear tablas y elimine sólo las tablas que creó?
No existe, Pero puedes utilizar un disparador (trigger) DDL para capturar el evento "DROP TABLE". Entonces dentro de este trigger puedes verificar quién creó la tabla y quién está intentando eliminarla. Si no son el mismo usuario entonces puedes revertir la operación y le pasas la notificacion.
Aqui te pongo el ejemplo. CREATE TRIGGER PreventDropUnlessOwner
ON DATABASE
FOR DROP_TABLE
AS
BEGIN
DECLARE @EventData XML = EVENTDATA();
DECLARE @DroppedTableName NVARCHAR(255) = @EventData.value('(/EVENT_INSTANCE/ObjectName)[1]', 'NVARCHAR(255)');
DECLARE @DropperName NVARCHAR(255) = @EventData.value('(/EVENT_INSTANCE/LoginName)[1]', 'NVARCHAR(255)');
DECLARE @TableOwner NVARCHAR(255);
SELECT @TableOwner = s.name
FROM sys.tables t
INNER JOIN sys.schemas s ON t.schema_id = s.schema_id
WHERE t.name = @DroppedTableName;
IF @TableOwner IS NOT NULL AND @TableOwner @DropperName
BEGIN
RAISERROR('No puedes eliminar las tablas que los otros han creado.', 16, 1);
ROLLBACK;
END
END;
Hola elimine el SQL desde panel de control por error. ahora me sale pantallas azules y se me apaga la pc. como soluciono eso?
Es muy probable que sea un problem con la instalacion de SQL Server o algun "driver" en Windows. Trata de apagar la computadora y reiniciarla en "safe mode" luego le haces que Windows repare el error.
Aqui esta el enlace: support.microsoft.com/en-us/windows/start-your-pc-in-safe-mode-in-windows-92c27cff-db89-8644-1ce4-b3e5e56fe234
Se puede recuperar el código de una tabla que la elimine pero aun. Me aparece la tabla pero no el..código
Carlos, se puede recuperar el código si tienes una copia de seguridad (backup) de la bases de datos.
Se puede revisar si alguien le hizo un delete a una tabla?
Si, es posible. Yo voy a crear otro video al respecto tambien.
Se puede obtener mas historia ??? o solamente desde la fecha que dice el reporte?
Buena pregunta. Se puede obtener mas historia si se activa la function de auditoria avanzada. Vamos a crear otro video al respecto.
@@AcademiaDeDatos ya se creó ese video ?
@@pachans992 Ya lo tenemos grabado. Estamos editandolo para subirlo pronto.
Gracias me ayudó para sancionar al culpable (no mentira) pero ya se le quitó permisos de escritura
Jajaja muy bien @FanexD