Eu tenho uma conta SQL com as seguintes permissões em um banco de dados:
A db_executor
função da qual você vê essa conta como membro foi criada por este script:
CREATE ROLE [db_executor] AUTHORIZATION [dbo]
GO
GRANT EXECUTE TO [db_executor]
GO
Quando eu executar um select
, update
, insert
ou delete
sobre a mesa, ele funciona bem. Quando tento truncate
a tabela, essa mensagem de erro é exibida:
Não foi possível encontrar o objeto "TableName" porque ele não existe ou você não tem permissões.
Que permissão está faltando nesta conta?
sql-server
sql-server-2012
permissions
Mansfield
fonte
fonte
TRUNCATE TABLE
é DDL, não DML.Respostas:
O melhor lugar para procurar essas informações é nos livros on-line. O artigo
TRUNCATE TABLE
aqui indica:Portanto, ALTER são as permissões mínimas necessárias. Você pode obtê-lo como proprietário do banco de dados, como DB_DDLAdmin. Ou apenas conceda alteração.
Se você pensar sobre o que o truncado faz e como ele funciona, isso faz sentido, é um comando bastante "severo" e esvazia a tabela de dados e o faz rapidamente.
fonte
Conforme esta referência na BOL :
fonte
Você pode criar um procedimento armazenado com executar como proprietário em apenas uma tabela ou um procedimento armazenado em qualquer tabela. No próximo código, é armazenado o procedimento para truncar qualquer tabela sem garantir a permissão de
db_owner
ou de outra:fonte
Você pode criar um procedimento armazenado com executar como proprietário em apenas uma tabela ou um procedimento armazenado em qualquer tabela. No próximo código, é armazenado o procedimento para truncar qualquer tabela sem garantir a permissão do db_owner ou de outro. Nesta versão do SP está incluído tratamento de erros e prevenção de injeção de SQL
fonte
Tanto quanto eu entendo Truncar não é algo que você pode reverter. Portanto, a transação de início / transação de confirmação é desnecessária.
fonte
BEGIN TRANSACTION RADHE SELECT @@TRANCOUNT select * from [dbo].[mytable] truncate table [dbo].[mytable] rollback select * from [dbo].[mytable] /*COMMIT TRAN RADHE*/ SELECT @@TRANCOUNT