在sql中撤消权限时的默认行为是什么?

xytpbqjk  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(382)

设想以下情况:数据库管理员创建新用户。我们叫他user1。管理员使用grant选项向user1授予权限。

GRANT A TO user1
WITH GRANT OPTION

现在user1将上述权限授予user2:

GRANT A TO user2
WITH GRANT OPTION

假设admin从user1中撤销了:

REVOKE A FROM user1

授予user2权限后会发生什么情况?他们还在工作吗?它们被删除了吗?行为是否取决于平台,因此在oracle、ms sql、mysql等平台上可能有所不同?我知道您可以通过在mssql中使用cascade关键字来指定这样的行为,但是我听说,当父级被撤销时,其他平台会在默认情况下删除子级授予。

dfuffjeb

dfuffjeb1#

在sql server中,从拥有该权限的主体撤消权限 with grant option 而谁给了其他校长这样的许可,谁就会失败。

Msg 4611, Level 16, State 1, Line 16
To revoke or deny grantable privileges, specify the CASCADE option.

要在SQLServer上测试这些东西,请创建没有登录和使用的用户 execute as 模拟它们并测试其行为和有效权限。

drop table if exists foo

create table foo(id int)
create user user1 without login 
create user user2 without login 

GRANT select on foo TO user1
WITH GRANT OPTION

execute as user='user1'
  select * from foo;
  GRANT select on foo TO user2
  WITH GRANT OPTION
revert

revoke select on foo to user1 --fails

go

revoke select on foo to user1 cascade

execute as user='user2'
  select * from foo; --fails
revert

相关问题