【问题标题】:What is a default behaviour when revoking permissions in SQL?在 SQL 中撤销权限时的默认行为是什么?
【发布时间】:2020-06-22 02:22:00
【问题描述】:

想象以下情况:数据库管理员创建新用户。我们称他为user1。管理员使用授权选项将权限 A 授予 user1。

GRANT A TO user1
WITH GRANT OPTION

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

GRANT A TO user2
WITH GRANT OPTION

假设管理员从 user1 撤消了 A:

REVOKE A FROM user1

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

【问题讨论】:

  • 为什么 user2 的权限会改变?您已删除 user1 的。

标签: sql sql-server authorization


【解决方案1】:

在 SQL Server 中,从持有该权限 with grant option 并且已将该权限授予其他主体的主体撤销权限将失败。

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

要在 SQL Server 上测试这些东西,请创建没有登录的用户并使用 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-03
    • 1970-01-01
    • 1970-01-01
    • 2015-01-13
    • 2021-11-17
    • 2016-06-05
    相关资源
    最近更新 更多