У меня есть учетная запись SQL со следующими разрешениями для базы данных:
db_executor
Роль , которую вы видите этот счет , будучи членом был создан этим скриптом:
CREATE ROLE [db_executor] AUTHORIZATION [dbo]
GO
GRANT EXECUTE TO [db_executor]
GO
Когда я побегать select
, update
, insert
или delete
на столе, она работает отлично. Когда я пытаюсь перейти truncate
к таблице, мне выдается следующее сообщение об ошибке:
Не удается найти объект «TableName», так как он не существует или у вас нет разрешений.
Какое разрешение этого аккаунта отсутствует?
sql-server
sql-server-2012
permissions
Mansfield
источник
источник
TRUNCATE TABLE
это DDL, а не DML.Ответы:
Лучшее место для поиска этой информации - в книгах онлайн. Статья
TRUNCATE TABLE
здесь указывает:Таким образом, ALTER - это минимальные необходимые разрешения. Вы можете получить это как Владелец БД, вы можете получить это как DB_DDLAdmin. Или просто дайте изменить.
Если вы думаете о том, что делает усечение и как оно работает, это имеет смысл, это довольно «серьезная» команда, которая очищает таблицу данных и делает это быстро.
источник
Согласно этой ссылке в BOL :
источник
Вы можете создать хранимую процедуру с исполнением от имени владельца только для одной таблицы или хранимой процедуры для любой таблицы. В следующем коде хранится процедура обрезания любой таблицы без предоставления разрешения
db_owner
или другого:источник
Вы можете создать хранимую процедуру с исполнением от имени владельца только для одной таблицы или хранимой процедуры для любой таблицы. В следующем коде хранится процедура обрезания любой таблицы без предоставления разрешения db_owner или другим. В эту версию SP включена обработка ошибок и предотвращение SQL-инъекций.
источник
Насколько я понимаю, Truncate - это не то, что вы можете откатить. Таким образом, Начать транзакцию / Подтвердить транзакцию не нужно.
источник
BEGIN TRANSACTION RADHE SELECT @@TRANCOUNT select * from [dbo].[mytable] truncate table [dbo].[mytable] rollback select * from [dbo].[mytable] /*COMMIT TRAN RADHE*/ SELECT @@TRANCOUNT