我有一个禁止userA更新它的tableA。 (userA是数据库用户)
DENY UPDATE ON tableA TO userA;
当我使用Window Authentication登录时,我使用以下查询更新tableA。
[查询]:
EXECUTE AS USER = 'userA';
GO
update tableA set colA='0001' where id=1;
GO
REVERT;
[信息]:
对象上的UPDATE权限被拒绝 ' tableA',数据库' DW',架构' dbo'。
====>这是我的预期结果。
但是,当我更改为登录时,用户A'使用SQL Server身份验证。
[查询]:
update tableA set colA='0001' where id=1
====>它允许更新!它应该阻止更新,对吗?我可以知道它为什么不阻止它吗?我错过了什么?
答案 0 :(得分:2)
如果 login userA
是sysadmin
服务器角色的成员,则可能会发生这种情况。
要获取此登录的实际行为,您应该模拟登录而不是用户:
EXECUTE AS LOGIN='userA'
当您模拟用户时,仅考虑显式授予用户的权限(在当前数据库中)。模拟登录时,还会考虑服务器级权限。
如果登录是sysadmin
服务器角色的成员,则不再验证权限(包括任何显式DENY)。根据{{3}},“DENY不适用于对象所有者或sysadmin固定服务器角色的成员”。