【问题标题】:How to make a table Read Only in SQL Server?如何在 SQL Server 中将表设为只读?
【发布时间】:2011-02-01 13:23:07
【问题描述】:

我正在更新该表中的一些记录集,之后我需要将该表设为只读。

那么如何在 SQL Server 中将表设为只读?

【问题讨论】:

  • 这里有几个很好的答案。我的问题是:该表必须为谁只读?系统管理员总是有权做任何事情,尽管这可能需要他们时间和精力。
  • 系统管理员用户以外的用户

标签: sql sql-server sql-server-2005


【解决方案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

有关此主题的更多详细信息,请访问此处:

How to make a table Read Only in SQL Server

【讨论】:

  • 试图改进这个答案,但我的编辑被拒绝了。请添加有关如何使文件组只读的缺失代码:ALTER DATABASE [csvtosp] MODIFY FILEGROUP [READONLYTABLES] READONLY
  • 1.文件组READONLYTABLES 不是 READONLY 2。无需删除表即可将其移动到另一个文件组。您只需要重新创建聚集索引。
【解决方案2】:
  1. 带回滚传输的触发器
  2. 只读文件组
  3. 不授予插入/更新/删除权限

3 号可能是最佳实践。例如,如果您的连接是 db_owner,则触发器可以禁用触发器或将表移动到不同的文件组。

【讨论】:

    【解决方案3】:

    如果您希望它对公众只读,但仍希望能够在以后编辑该表,您可能需要考虑为该数据库创建多个用户并授予该数据库不同的权限 - 理想情况下无论如何,您都应该这样做,并且不允许公众访问更改表、截断等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-07
      • 2015-11-14
      • 2013-03-30
      • 1970-01-01
      • 1970-01-01
      • 2017-03-02
      • 2013-10-02
      相关资源
      最近更新 更多