J'ai un compte SQL avec les autorisations suivantes sur une base de données:
Le db_executor
rôle dont vous voyez que ce compte est membre a été créé par ce script:
CREATE ROLE [db_executor] AUTHORIZATION [dbo]
GO
GRANT EXECUTE TO [db_executor]
GO
Quand je lance un select
, update
, insert
ou delete
sur la table, il fonctionne très bien. Lorsque j'essaie de truncate
la table, il me donne ce message d'erreur:
Impossible de trouver l'objet "TableName" car il n'existe pas ou vous ne disposez pas des autorisations.
Quelle autorisation manque ce compte?
sql-server
sql-server-2012
permissions
Mansfield
la source
la source
TRUNCATE TABLE
est DDL, pas DML.Réponses:
Le meilleur endroit pour rechercher ces informations est dans les livres en ligne. L'article
TRUNCATE TABLE
ici indique:ALTER correspond donc aux autorisations minimales requises. Vous pouvez l'obtenir en tant que propriétaire de la base de données, vous pouvez l'obtenir en tant que DB_DDLAdmin. Ou accordez simplement alter.
Si vous pensez à ce que fait tronquer et comment cela fonctionne, cela a du sens, c'est une commande assez "sévère" qui vide la table de données et le fait rapidement.
la source
Selon cette référence dans BOL :
la source
Vous pouvez créer une procédure stockée avec execute en tant que propriétaire sur une seule table ou une procédure stockée sur n'importe quelle table. Dans le code suivant est une procédure stockée pour tronquer n'importe quelle table sans attribuer la permission de
db_owner
ou autre:la source
Vous pouvez créer une procédure stockée avec execute en tant que propriétaire sur une seule table ou une procédure stockée sur n'importe quelle table. Dans le code suivant est une procédure stockée pour tronquer n'importe quelle table sans attribuer l'autorisation de db_owner ou autre. Dans cette version de SP est inclus la gestion des erreurs et la prévention de l'injection SQL
la source
Pour autant que je le comprends, tronquer n'est pas quelque chose que vous pouvez annuler. Ainsi, la transaction Begin Transaction / Commit Transaction n'est pas nécessaire.
la source
BEGIN TRANSACTION RADHE SELECT @@TRANCOUNT select * from [dbo].[mytable] truncate table [dbo].[mytable] rollback select * from [dbo].[mytable] /*COMMIT TRAN RADHE*/ SELECT @@TRANCOUNT