SQL Server撤销一个select

让我们假设一个用户“Bob”获得来自John的SELECT权限,Bob也从另一个用户Joe获得SELECT权限,但是这次使用GRANT选项。

如果有人从级联中撤消Bob的select权限,会发生什么? 鲍勃的账户和鲍勃所授权的所有账户(即使他们之前已经从其他地方像组织了吗? 如果是这样,整个组是否会松动Select权限或只有一个有Bob的Select权限的用户呢?

不,他们不会失去权限。

如果一个GRANT是由多个主体执行相同的权限,那么SQL Server将会跟踪这个权限。 也就是说,它会存储多次执行GRANT的主体所区分的权限。

所以说,pipe理员运行这些:

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 

最后pipe理员运行这个:

 REVOKE SELECT ON OBJECT::MyDb.dbo.MyTable TO UserA CASCADE 

UserB在MyTable上保留SELECT权限,因为它在第一批中受到了Admin的支持。

在你的情况下,整个组不会失去访问权限,只有Bob授予SELECT的一个用户,假设没有其他人也授予了相同的权限。

一个用户将保留权限,但如果他们是Windows组或具有该权限的数据库angular色的一部分。 也就是说,只要权限不是由Bob授予的。