web-dev-qa-db-fra.com

Autorisations pour tronquer une table

De quelle autorisation ai-je besoin pour ACCORDER un utilisateur, en MSSQL, afin de pouvoir tronquer une table?

J'essaie d'accorder l'ensemble minimal d'autorisations, mais je ne peux pas utiliser DELETE, car la table est très grande et je veux que l'opération soit rapide.

40
Shahar Mosek

Vous avez besoin de l'autorisation ALTER: voir la section Autorisations ici .

Notez que vous pouvez également utiliser une procédure stockée avec EXECUTE AS, de sorte que l'utilisateur exécutant la procédure stockée n'a même pas besoin de l'autorisation ALTER.

70
Shahar Mosek

Vous pouvez créer une procédure stockée with execute as owner:

create procedure dbo.TruncTable
with execute as owner
as
truncate table TheTable
go

Accordez ensuite des autorisations d'exécution à quiconque a besoin de tronquer cette table:

grant execute on TruncTable to TheUser

Maintenant, TheUser peut tronquer la table comme:

exec dbo.TruncTable
8
Andomar

L'autorisation minimale requise est ALTER sur nom_table. Les autorisations TRUNCATE TABLE sont attribuées par défaut au propriétaire de la table, aux membres du rôle serveur fixe sysadmin et aux rôles de base de données fixes db_owner et db_ddladmin et ne sont pas transférables. Cependant, vous pouvez incorporer l'instruction TRUNCATE TABLE dans un module, tel qu'une procédure stockée, et accorder les autorisations appropriées au module à l'aide de la clause EXECUTE AS. Pour plus d'informations, voir Utilisation de EXECUTE AS pour créer des jeux d'autorisations personnalisés.

Source

8
Martin Smith

Ne donnez PAS, cachez ...

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 peut être est sans aucun doute mieux pour séparer une SUPPRESSION normale d'une TRONCATE TABLE

Je n'ai pas essayé ça ...

Edit : modifié pour utiliser SET CONTEXT_INFO.

1
gbn