Создание представлений только для чтения в Sql Server - PullRequest
8 голосов
/ 18 октября 2011

Согласно MSDN, представления, состоящие из простого выбора, автоматически позволяют использовать операторы вставки / обновления / удаления в таблице. Есть ли способ предотвратить это - сообщить Sql Server, что представление доступно только для чтения, и вы не можете использовать его для изменения таблицы?

Ответы [ 3 ]

14 голосов
/ 18 октября 2011

Лучший способ - удалить разрешения UPDATE/DELETE/INSERT в представлении.

Кроме того, вы можете создать INSTEAD OF триггер для представления, который просто не делает ничего, чтобы обновления молча терпели неудачу, или есть довольно много конструкций, которые делают представления не обновляемыми .Таким образом, вы можете выбрать тот, который не меняет семантику или эффективность, а затем нарушить его.

Редактировать: Кажется, что приведенное ниже соответствует требованиям.

CREATE VIEW Bar
AS
SELECT TOP 100 PERCENT x
FROM foo
WITH CHECK OPTION
11 голосов
/ 03 октября 2012

Вы можете указать оператор UNION, чтобы сбой SQL Server во время операции INSERT / UPDATE / DELETE , например:

create view SampleView
as
  select ID, value from table
  union all
  select 0, '0' where 1=0

Последний запрос не '• вообще не возвращать строки, но должно иметь одинаковое количество полей с теми же типами данных, что и первый запрос, чтобы безопасно использовать UNION.См. Эту ссылку для получения дополнительной информации: Различные способы сделать таблицу доступной только для чтения в базе данных SQL Server

0 голосов
/ 04 апреля 2019

Лучший способ справиться с этим - разрешить выбирать только доступ к просмотрам. Или Запретить Вставить / Обновить / Удалить доступ для указанных пользователей. Работает отлично. Также создайте виды "WITH (NOLOCK)".

...