sqlserver 新建用户要给什么权限_将SQL中几张表设为只读,这是什么奇怪需求?...

点击关注上方“SQL数据库开发”,

设为“置顶或星标”,第一时间送达干货

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

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

  1. 进入Sqlserver Management Studio(MSSQL客户端)

  2. 选择安全性->登录名->右键新建登录名

  3. 在常规里输入用户名和密码

  4. 在"用户映射"里“映射到此登录名的用户”选择该用户可以操作的数据库

  5. 在“数据库角色成员身份”里选择"db_datareader",

  6. 这样一个只读用户就创建完成了。

bed1246e1eec31d991e79609a502cda9.png 但是这样会造成所有的表都变成只读,这与需求不符。 那该怎么办呢?今天就告诉大家几种常见的方法。 1、使用触发器限制单表只读 有如下一张创建好的表Teacher 460c71d54eb0922855d4ee818c8c28b1.png 我们先往里面插入一条数据来证明它是可写的。
INSERT 
再查下一下表里面的结果,看是否写进去了。 586decad4bf771672c8f3e88edaabdad.png 证明该表是可写的,下面我们开始新建一个触发器将其设为只读。
CREATE 

(提示:可以左右滑动代码)

创建完成后,我们再往Teacher里面写数据或删数据

INSERT 
结果会报如下错误提示: e7e2750cd6aea770016187e20ae071cc.png 证明我们设置的触发器生效了。 虽然我们一般不提倡在数据库中使用触发器,因为触发器会造成有很多性能上的影响,但是如果用来控制权限还是可以的。 此外该方法只针对少量需要设置为只读的表,如果需要设置表比较多就不太合适了。 如果要禁用该触发器也很简单,使用如下代码即可:
disable trigger trReadOnly_Teacher 
2、创建只读文件组 先创建一个只读文件组
--创建文件组READ_ONLY_TBLS
然后将要设为只读的文件先插入临时表再删除
SELECT * 
然后创建刚被删除的表名,再将临时表里面的数据插入进去,最后将文件组设为只读即可
CREATE 

下面我们试着往Teacher里面插入数据:

INSERT 
结果如下: ed2f7194431e64c6010f7f91b079f895.png 证明也是不可写的。 这种方法相比触发器复杂一点,但是可以大批量的设置,前提是要备份好数据。 3、拒绝对象级别的操作 可以通过DCL命令控制用户权限,但此步无法限制高级权限用户(如system admin,DatabaseOwner)
INSERT, 
4、创建视图 为了替代直接访问表,可以使用视图:
CREATE 

当我们要删除视图中的数据时

DELETE 
会得到如下提示: 50f9bfeba3cdee087fe65a0169205f8e.png 如果不加UNION ALL,正常的视图是可以删除数据的。 以上就是几种常见的将表设为只读的方法,可以根据自身实际需求进行选择。

——End——

后台回复关键字:1024,获取一份精心整理的技术干货

后台回复关键字:进群,带你进入高手如云的交流群。

推荐阅读

  • Oracle常用函数整理

  • 30种SQL语句优化,进阶必备!
  • 50道SQL经典面试题(下)
  • 50道SQL经典面试题(上)
这是一个能学到技术的公众号,欢迎关注 452cf6ee3141217e62b7de57d934cfd7.png 点击「 」了解SQL训练营
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值