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

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

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

Ответ 1

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

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

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

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

a) поместите его в свою собственную базу данных или
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

Ответ 2

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

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

Ответ 3

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