Возможно ли применение полей только для чтения в SQL Server 2008 R2? - PullRequest
0 голосов
/ 21 декабря 2010

Я бы хотел запретить запросы UPDATE, которые записывают поверх полей ctaintain в моей базе данных. Я также хочу предотвратить запросы UPDATE или DELETE любого типа для определенных таблиц, поскольку эти таблицы содержат постоянную информацию, которая должна сохраняться бесконечно.

Можно ли реализовать эти конфигурации в SQL Server Management Studio?

Ответы [ 3 ]

8 голосов
/ 21 декабря 2010

Чтобы предотвратить обновления некоторых полей, вам, вероятно, понадобится триггер AFTER UPDATE для этой таблицы, который будет проверять, будет ли обновлено какое-либо из полей «только для чтения»;если это так, прервите транзакцию.

CREATE TRIGGER triggerName
ON dbo.YourTable AFTER UPDATE
AS
   IF UPDATE(somefield)
      ROLLBACK TRANSACTION

Чтобы предотвратить доступ определенных пользователей к определенным таблицам, просто не предоставляйте этим пользователям (или роли базы данных, к которым они принадлежат) разрешение UPDATE и / или DELETE для этихтаблицы.

4 голосов
/ 21 декабря 2010
  1. Удалить все разрешения для таблиц только для чтения. Никто не может внести изменения тогда

  2. Рассмотрите сохраненные процессы или представления для управления записью, снова удалите прямые разрешения

  3. См. Marc_s ответ

Если ваши пользователи подключаются как dbo или sa, то вы ничего не можете сделать, чтобы это было эффективно. Пользователи могут отключить триггеры или удалить их. С разрешениями sa все равно никогда не проверяются.

1 голос
/ 21 декабря 2010

@ marc_s правильно, если вы хотите предотвратить изменения в некоторых полях, вы должны использовать триггер или ограничить права пользователя, если вы являетесь dba. В любом случае вместо триггера AFTER я бы использовал триггер INSTEAD OF, поэтому откат транзакции не требуется.

CREATE TRIGGER triggerName 
ON dbo.YourTable INSTEAD OF UPDATE, INSERT 
AS    
IF UPDATE(somefield)       
    -- do nothing or whatever

В любом случае, если вы найдете правильный ответ, примите ответ, предоставленный @marc_s, это просто что-то сверх этого ответа

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...