sql-server - que - truncate table postgresql
Permisos para truncar una tabla (5)
El permiso mínimo requerido es ALTER en table_name. Los permisos de TRUNCATE TABLE predeterminados para el propietario de la tabla, los miembros de la función de servidor fijo sysadmin y los roles de base de datos fijos db_owner y db_ddladmin, y no son transferibles. Sin embargo, puede incorporar la instrucción TRUNCATE TABLE dentro de un módulo, como un procedimiento almacenado, y otorgar los permisos apropiados al módulo utilizando la cláusula EXECUTE AS. Para obtener más información, consulte Uso de EXECUTE AS para crear conjuntos de permisos personalizados.
¿Qué permiso necesito otorgar a un usuario, en MSSQL, para poder truncar una tabla?
Intento otorgar el conjunto mínimo de permisos, pero no puedo usar ELIMINAR porque la tabla es muy grande y quiero que la operación sea rápida.
Necesita el permiso ALTER: consulte la sección Permisos here .
Tenga en cuenta que también puede usar un procedimiento almacenado con EXECUTE AS, de modo que el usuario que ejecuta el procedimiento almacenado no necesita ni siquiera tener el permiso ALTER.
No otorgar, ocultar ...
CREATE TRIGGER TRG_MyTable_Foo
WITH EXECUTE AS OWNER
INSTEAD OF DELETE
AS
IF CONTEXT_INFO() = 0x9999
BEGIN
TRUNCATE TABLE MyTable
SET CONTEXT_INFO 0x00
END
GO
SET CONTEXT_INFO 0x9999
DELETE MyTable WHERE 1=0
SET CONTEXT_INFO puede ser, sin dudas, mejor separar un DELETE normal de una TRUNCATE TABLE
No he intentado esto ...
Editar : cambiado para usar SET CONTEXT_INFO.
Puede crear un procedimiento almacenado with execute as owner
:
create procedure dbo.TruncTable
with execute as owner
as
truncate table TheTable
go
A continuación, otorgue permisos de ejecución a quien necesite truncar esa tabla:
grant execute on TruncTable to TheUser
Ahora TheUser
puede truncar la tabla como:
exec dbo.TruncTable
Puede crear un procedimiento almacenado ejecutando como propietario solo una tabla o un procedimiento de almacenamiento en cualquier tabla:
CREATE PROCEDURE [dbo].[spTruncate]
@nameTable varchar(60)
WITH EXECUTE AS OWNER
AS
SET NOCOUNT OFF;
DECLARE @QUERY NVARCHAR(200);
SET @QUERY = N''TRUNCATE TABLE '' + @nameTable + '';''
EXECUTE sp_executesql @QUERY;