2010-03-27 2 views
19

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

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

+0

Несколько полезных ответов здесь. Мой вопрос: для кого таблица должна быть только для чтения? SysAdmins всегда имеют право что-либо делать, хотя это может занять время и силы. –

+1

, кроме пользователей системного администратора – Jeyavel

ответ

29

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

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

Имейте в виду: это позволяет избежать вставки и обновления, но позволяет удалений.

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

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

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 

Для получения более подробной информации по этому вопросу, идут сюда:

How to make a table Read Only in SQL Server

+2

Попытался улучшить этот ответ, но мое редактирование было отклонено. Пожалуйста, добавьте недостающий код для того, как сделать файловую группу только для чтения: 'ALTER DATABASE [csvtosp] MODIFY FILEGROUP [READONLYTABLES] READONLY' – Baodad

+0

1. Filegroup' READONLYTABLES' не READONLY 2. Нет необходимости отбрасывать таблицу, чтобы переместить ее в другую файловую группу , Вам просто нужно воссоздать кластеризованный индекс. –

2

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

7
  1. Trigger с откатом транса
  2. Читать только
  3. файловой группы
  4. не предоставляйте вставки/обновление/удаление разрешений

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

Смежные вопросы