with que hace foreign ejemplo drop sql-server database-permissions

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.

here

¿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;