2010-03-27 28 views
19

Tôi đang cập nhật một số bản ghi trong bảng đó, sau đó tôi cần phải làm cho bảng này chỉ đọc.Cách tạo bảng Chỉ đọc trong SQL Server?

Vậy cách tạo bảng Chỉ đọc trong SQL Server?

+0

Một số câu trả lời hay ở đây. Câu hỏi của tôi là: ai phải là người chỉ đọc? SysAdmins luôn có khả năng làm bất cứ điều gì, mặc dù nó có thể mất thời gian và công sức. –

+1

ngoài người dùng quản trị hệ thống – Jeyavel

Trả lời

29

Một lựa chọn đơn giản mà có thể chặn cập nhật và chèn vào một bảng cụ thể nhưng vẫn cho phép xóa:

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

Hãy nhận biết: đây tránh chèn và cập nhật, nhưng cho phép xóa.

Nếu bạn thực sự cần một bảng để được thực sự chỉ đọc bạn cũng có thể một trong hai:

a) đặt nó trong cơ sở dữ liệu riêng của mình hoặc
b) đặt nó vào một nhóm tập tin và dấu ấn mà chỉ đọc, sau đây là như thế nào:

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 

Để biết thêm chi tiết về vấn đề này, hãy vào đây:

How to make a table Read Only in SQL Server

+2

Đã cố gắng cải thiện câu trả lời này, nhưng bản chỉnh sửa của tôi đã bị từ chối. Vui lòng thêm mã bị thiếu để biết cách tạo một tệp tin chỉ đọc: 'ALTER DATABASE [csvtosp] MODIFY FILEGROUP [READONLYTABLES] READONLY' – Baodad

+0

1. Filegroup' READONLYTABLES' không phải là READONLY 2. Không cần phải thả bảng để chuyển nó sang một nhóm tệp khác . Bạn chỉ cần tạo lại chỉ mục nhóm. –

2

Nếu bạn muốn nó chỉ đọc cho công chúng, nhưng vẫn muốn có thể chỉnh sửa bảng vào một ngày sau đó, bạn có thể muốn xem xét việc tạo nhiều người dùng cho cơ sở dữ liệu và cấp các quyền khác nhau cho cơ sở dữ liệu đó - lý tưởng là bạn nên được làm điều này anyway và không cho phép truy cập công cộng nói chung để thay đổi bảng, cắt xén, vv

7
  1. Kích hoạt với rollback xuyên
  2. chỉ đọc filegroup
  3. Đừng cấp insert/update/delete quyền

Số 3 có lẽ là phương pháp hay nhất. Ví dụ: nếu kết nối của bạn là db_owner chẳng hạn thì trình kích hoạt có thể tắt trình kích hoạt hoặc di chuyển bảng đến một nhóm tệp khác.

Các vấn đề liên quan