sql - 拒绝特定用户对一组表的选择权限
问题描述
我正在使用SQL Server 2014
. 我需要拒绝SELECT
特定用户对一组表的权限。
我有以下代码可以完成这项工作,但我需要为每个相关表运行它:
USE [MyDatabase]
DENY SELECT ON [mktg_Rating] TO [xxxxx\User]
假设我必须拒绝对以“mktg_...”开头的所有表上的特定用户的选择权限,我该如何重写上述代码以一次性完成此操作?
解决方案
如果所有表都位于它们自己的模式中,并且该模式中没有其他对象,则可以使用拒绝对模式本身进行选择schema::yourSchemaNameHere
除此之外,没有办法在单个语句中做到这一点。您不能使用通配符等。但是你可以做的是让 SQL 为你生成命令,通过动态管理视图做一些有趣的事情:
select concat('deny select on ', s.name, '.', t.name, ' to [xxxxx\user];')
from sys.tables t
join sys.schemas s on s.schema_id = t.schema_id
where t.name like 'mktg[_]%'
运行此查询以生成您需要的语句,然后将输出复制回查询窗口并一起运行所有这些语句。
quotename()
如果您有一些时髦的名字,请添加电话...
select concat('deny select on ', quotename(s.name), '.', quotename(t.name), ' to [xxxxx\user];')
推荐阅读
- python - 使用 aiohttp 的多个请求,但每个请求单独超时
- ruby-on-rails - 我如何使用 rspec 运行测试,使用 simple_token_authentication 并设计
- http - 为什么以下代码中的最后一个错误处理程序存在无效参数错误?
- c - 除了字母值之外,错误字符串变量正在接收 0x603270
- javascript - 如何在 React Hook 中添加自定义类名?
- regex - 为什么有grep的时候find命令有-regex?
- android - 在拦截器中使用改造刷新令牌后重新执行 Web 服务请求
- javascript - 检查 Array 中的数组元素是否包含 false 的方法
- simulation - 时间步长的变化不会影响 Dymola 中的模拟结果
- python - Celery 无法决定它是否有结果后端