Как запретить пользователю базы данных удалять данные из ВСЕХ таблиц с помощью триггеров - PullRequest
0 голосов
/ 11 января 2011

Привет, эксперты. Как я могу предотвратить удаление пользователем данных в таблицах с помощью триггеров пользователем базы данных?Я хочу просто Админ удалить данные из таблиц

Спасибо

Ответы [ 2 ]

7 голосов
/ 11 января 2011

Умм, забрать что у пользователей разрешение? Если вы не хотите, чтобы они что-то делали, «запретите» им это правильно ... вот почему у нас есть разрешения.

Вот подробности о том, как отозвать разрешения:

http://msdn.microsoft.com/en-us/library/ms186308.aspx

6 голосов
/ 11 января 2011

Есть ли какая-то конкретная причина, по которой вы хотите использовать триггеры?

Вы можете просто удалить разрешение DELETE у пользователей, которых хотите ограничить.Взгляните на раздел «Разрешения» здесь: http://msdn.microsoft.com/en-us/library/ms189835.aspx

РЕДАКТИРОВАТЬ: Поскольку вы говорите, что хотите использовать триггеры (но я действительно думаю, что вы должны пересмотреть), вы можете создатьтаблица, такая как:

CREATE TABLE Restricted_Users 
(
  user_name VARCHAR(40) PRIMARY_KEY -- Use a size appropriate to your requirements
)

Создать INSTEAD OF DELETE срабатывает на всех ваших таблицах (это будет рутина), которая проверяет наличие USER_NAME() в таблице Restricted_Users иесли они EXIST, вы можете вызвать RAISERROR, чтобы вызвать откат транзакции и отобразить сообщение для пользователя.

Помните, что вам нужно будет поддерживать эти триггеры для всех новых таблиц, добавленных в базу данных, кака также ведение списка пользователей в таблице Restricted_Users при каждом добавлении / удалении пользователей из базы данных.

Было бы намного проще использовать систему разрешений, доступную в SQL Server.(это то, для чего он предназначен) использование ролей с соответствующими разрешениями, установленными для таблиц.Затем при добавлении новых пользователей вам всего лишь нужно назначить им соответствующую роль, и разрешения на удаление будут обработаны для вас.

...