假设用户“Bob”从 John 处获得 SELECT 权限,并且 Bob 还从另一个用户 Joe 处获得 SELECT 权限,但这次带有 GRANT 选项。
如果有人级联撤销 Bob 的 select 权限,会发生什么情况?select 权限是否会从 Bob 的帐户以及 Bob 授予该权限的所有帐户中删除(即使他们之前在其他地方(例如群组)拥有该权限?)?如果是这样,整个群组是否会失去 Select 权限,还是只有拥有 Bob 授予 Select 权限的用户会失去该权限?
答案1
不会,他们不会失去权限。
如果多个主体对同一权限执行 GRANT,SQL Server 将跟踪该情况。也就是说,它将多次存储该权限,以区分执行 GRANT 的主体。
因此,假设管理员运行这些:
GRANT SELECT ON OBJECT::MyDb.dbo.MyTable to UserA WITH GRANT OPTION
GRANT SELECT ON OBJECT::MyDb.dbo.MyTable to UserB
然后 UserA 运行第二条语句:
GRANT SELECT ON OBJECT::MyDb.dbo.MyTable to UserB
最后管理员运行这个:
REVOKE SELECT ON OBJECT::MyDb.dbo.MyTable TO UserA CASCADE
UserB 保留对 MyTable 的 SELECT 权限,因为该权限是在第一批中由管理员授予的。
在您的情况下,整个组不会失去访问权限,只有 Bob 授予 SELECT 的一个用户会失去访问权限,假设没有其他人也授予相同的权限。
但是,如果该用户属于 Windows 组或具有相应权限的数据库角色,则该用户将保留相应权限。也就是说,只要该权限不是由 Bob 授予的。