Как запретить разрешения на запуск Disabe для группы пользователей?

#sql #sql-server #tsql

#sql #sql-сервер #tsql

Вопрос:

Я хотел знать синтаксис SQL, чтобы запретить отключение триггера для группы пользователей. Существует важный триггер, который некоторые люди отключают и повторно включают. Я хочу, чтобы это не было отключено в первую очередь. Итак, я попробовал следующий синтаксис.

 USE [MyDBName]
GO
DENY ALTER ON OBJECT::[dbo].[TRIG_SomeName_DELETE] TO [UserGroup];
  

Но я получаю сообщение об ошибке типа ‘Не удается найти объект ‘TRIG_SomeName_DELETE’, потому что он не существует или у вас нет разрешения.‘. Я попытался выполнить приведенные выше инструкции из учетной записи sql с повышенными привилегиями. Но я продолжаю получать ту же ошибку. Я думаю, что, возможно, я не использую правильный синтаксис для отказа в разрешениях на отключение триггера. Я был бы очень признателен за любую помощь в этом.

Ответ №1:

Вам нужно исключить [dbo]. поскольку триггер уровня базы данных не принадлежит схеме. Кроме того, триггеры уровня базы данных не имеют ALTER разрешения. Вам придется запретить им редактировать любой триггер на уровне базы данных (используя точно названное ALTER ANY DATABASE DDL TRIGGER разрешение):

 USE [MyDBName];
GO
DENY ALTER ANY DATABASE DDL TRIGGER TO [UserGroup];
  

Это не позволит никому в UserGroup создавать, удалять, изменять, включать или отключать любые триггеры DDL на уровне базы данных.