我正在针对SQL Server 2016 Enterprise Edition运行SSMS 18.4。
我使用GUI编辑器在表上设置列级权限,然后将更改脚本化为新查询窗口以执行权限更改。执行生成的SQL之后,我刷新并打开了相关用户组的属性窗口,并注意到在表的可用列列表中并非所有要选择的列都可供访问。我返回查看代码,SSMS在我授予权限的列列表的中间插入了错误的REVOKE语句。我只重复了几次这个问题。似乎不一致,因此我正在与社区联系以确保这不是我正在做的事情。我只有在使用列级权限时才看到此消息。
我完成的步骤得到了不希望的行为。
数据库>安全性>用户组>属性
突出显示对象名称(表或视图)。
检查授予的选择权限。
单击“列权限”按钮。
在GRANT框中选中特定列,然后单击OK。
对新查询窗口的脚本操作。
生成的SQL中断了某些列的设置期望的权限。或整个对象(如果SSMS将REVOKE放在所有GRANT语句的末尾)。
use [Database]
GO
GRANT SELECT ON Schema.[Table] ([Column1]) TO [User Group]
GO
use [Database]
GO
GRANT SELECT ON Schema.[Table] ([Column2]) TO [User Group]
GO
use [Database]
GO
REVOKE SELECT ON Schema.[Table] TO [User Group]
GO
use [Database]
GO
GRANT SELECT ON Schema.[Table] ([Column3]) TO [User Group]
GO
use [Database]
GO
GRANT SELECT ON Schema.[Table] ([Column4]) TO [User Group]
GO
use [Database]
GO
GRANT SELECT ON Schema.[Table] ([Column5]) TO [User Group]
GO
如您所见,中间的REVOKE只会授予对最后三列而不是前两列的SELECT权限。