Как сделать таблицу Только для чтения в SQL Server?

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

Итак, как сделать таблицу только для чтения в SQL Server?

Solutions Collecting From Web of "Как сделать таблицу Только для чтения в SQL Server?"

Простая альтернатива, которая блокирует обновление и вставляет в определенную таблицу, но все же позволяет удалять:

ALTER TABLE mytable WITH NOCHECK ADD CONSTRAINT chk_read_only CHECK( 1 = 0 ) 

Помните: это позволяет избежать INSERT и UPDATE, но позволяет DELETE.

Если вам действительно нужно, чтобы стол действительно читался, вы также могли:

а) поместить его в свою собственную базу данных или
b) поместите его в группу файлов и отметьте это только для чтения, вот как:

 USE [master] GO ALTER DATABASE [csvtosp] ADD FILEGROUP [READONLYTABLES] GO ALTER DATABASE [csvtosp] ADD FILE ( NAME = N'mydb_readonly_tables', FILENAME = N'G:\SQL2005DATA\mydb_readonly_tables.ndf' , SIZE = 3072KB , FILEGROWTH = 1024KB ) TO FILEGROUP [READONLYTABLES] GO USE csvtosp GO DROP TABLE mytable CREATE TABLE mytable ( somedata char(8000) not null ) ON READONLYTABLES GO 

Более подробную информацию по этому вопросу можно найти здесь:

Как сделать таблицу Только для чтения в SQL Server

  1. Trigger with rollback trans
  2. Только файловая группа только для чтения
  3. Не предоставлять разрешения на вставку / обновление / удаление

Вероятно, номер 3 – лучшая практика. Например, если ваше соединение является db_owner, например, триггер может отключить триггер или переместить таблицу в другую файловую группу в любом случае.

Если вы хотите, чтобы это было прочитано только для широкой публики, но все же хотите иметь возможность редактировать таблицу позднее, вам может потребоваться создать несколько пользователей для базы данных и предоставить разные разрешения для этой базы данных – в идеале вы должны быть делать это в любом случае и не разрешать доступ широкой общественности к изменению таблицы, усечению и т. д.