首页 > 解决方案 > 拒绝特定用户对一组表的选择权限

问题描述

我正在使用SQL Server 2014. 我需要拒绝SELECT特定用户对一组表的权限。

我有以下代码可以完成这项工作,但我需要为每个相关表运行它:

USE [MyDatabase]

DENY SELECT ON [mktg_Rating] TO [xxxxx\User]

假设我必须拒绝对以“mktg_...”开头的所有表上的特定用户的选择权限,我该如何重写上述代码以一次性完成此操作?

标签: sqlsql-servertsql

解决方案


如果所有表都位于它们自己的模式中,并且该模式中没有其他对象,则可以使用拒绝对模式本身进行选择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];')

推荐阅读