Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL中撤销权限时的默认行为是什么?_Sql_Sql Server_Authorization - Fatal编程技术网

在SQL中撤销权限时的默认行为是什么?

在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等

设想以下情况:数据库管理员创建新用户。我们叫他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等平台上可能有所不同?我知道你可以通过在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。