将SQL中几张表设为只读,这是什么奇怪需求?

近接到一个奇怪的需求,要将SQL Server中的几张表设为只读。我的反应就是直接将用户设为只读权限就好了,但是仔细一想又不是那么回事。

创建只读账号

SQL Server的只读账号是针对某个具体的数据库,设置的方法很简单:

  • 进入Sqlserver Management Studio(MSSQL客户端)
  • 选择安全性->登录名->右键新建登录名
  • 在常规里输入用户名和密码
  • 在"用户映射"里“映射到此登录名的用户”选择该用户可以操作的数据库
  • 在“数据库角色成员身份”里选择"db_datareader",
  • 这样一个只读用户就创建完成了。
  • 但是这样会造成所有的表都变成只读,这与需求不符。

    那该怎么办呢?今天就告诉大家几种常见的方法。

    1、使用触发器限制单表只读

    有如下一张创建好的表Teacher

    我们先往里面插入一条数据来证明它是可写的。

    INSERT INTO Teacher VALUES('04','马六');