在SQL中撤销权限时的默认行为是什么?
设想以下情况:数据库管理员创建新用户。我们叫他user1。管理员使用“授予”选项向用户1授予权限在SQL中撤销权限时的默认行为是什么?,sql,sql-server,authorization,Sql,Sql Server,Authorization,设想以下情况:数据库管理员创建新用户。我们叫他user1。管理员使用“授予”选项向用户1授予权限 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等
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等平台上可能有所不同?我知道你可以通过在MS SQL中使用CASCADE关键字来指定这样的行为,但我听说,其他平台默认删除子授权,当父级被撤销时。在SQL Server中,使用grant选项从拥有该权限的主体中撤销该权限,并且将该权限授予其他主体的主体将失败
Msg 4611, Level 16, State 1, Line 16
To revoke or deny grantable privileges, specify the CASCADE option.
要在SQL Server上测试这些内容,请创建未登录的用户,并使用来模拟他们,测试其行为和有效权限
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
在SQL Server中,使用grant option从拥有该权限的主体中撤消权限,并且已将该权限授予其他主体的主体将失败
Msg 4611, Level 16, State 1, Line 16
To revoke or deny grantable privileges, specify the CASCADE option.
要在SQL Server上测试这些内容,请创建未登录的用户,并使用来模拟他们,测试其行为和有效权限
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
为什么user2权限会更改?您已删除user1。为什么user2权限会更改?您已删除user1。