gpt4 book ai didi

postgresql - 当REVOKE GRANT被称为PostgreSQL时,二级权限会发生什么?

转载 作者:行者123 更新时间:2023-12-03 03:37:02 25 4
gpt4 key购买 nike

假设一个用户,u1 授予另一个用户 u2 权限以查看 PostgreSQL 中的表,并授予他们GRANT OPTION:

GRANT SELECT ON t1 TO u1 WITH GRANT OPTION;

现在,u2 向另一个用户 u3 授予权限:

-- AS u2
GRANT SELECT ON t1 TO u3;

现在,u2 改变了组织中的职位,并且他们的权限也发生了变化。其中,他们对t1的查看权限被撤销:

-- As u1
REVOKE GRANT OPTION ON t1 FROM u2;

u3 的权限会发生什么变化?

<小时/>

附加问题:如果 u1 的权限被撤销,u2u3 会发生什么情况?

REVOKE ALL ON t1 FROM u1;

最佳答案

某人因收到权限的GRANT OPTION而授予的权限依赖于原始权限。

要撤销原始权限,您必须使用CASCADE选项,该选项将使撤销级联到所有相关权限。

因此,任何特权都不会成为“孤儿”。

一个简单的实验:

  • 创建表和角色并授予权限:

    test=# CREATE TABLE t1 (id integer PRIMARY KEY);
    CREATE TABLE
    test=# CREATE ROLE u1 LOGIN;
    CREATE ROLE
    test=# GRANT SELECT ON t1 TO u1 WITH GRANT OPTION;
    GRANT
    test=# CREATE ROLE u2 LOGIN;
    CREATE ROLE
    test=# CREATE ROLE u3 LOGIN;
    CREATE ROLE
    test=# SET ROLE u1;
    SET
    test=> GRANT SELECT ON t1 TO u2 WITH GRANT OPTION;
    GRANT
    test=> RESET ROLE;
    RESET
    test=# SET ROLE u2;
    SET
    test=> GRANT SELECT ON t1 TO u3 WITH GRANT OPTION;
    GRANT
    test=> RESET ROLE;
    RESET
    test=# \z t1
    Access privileges
    Schema | Name | Type | Access privileges | Column privileges | Policies
    --------+------+-------+---------------------------+-------------------+----------
    public | t1 | table | postgres=arwdDxt/postgres+| |
    | | | u1=r*/postgres +| |
    | | | u2=r*/u1 +| |
    | | | u3=r*/u2 | |
    (1 row)
  • 现在,u1 撤销 u2GRANT OPTION:

    test=# SET ROLE u1;
    SET
    test=> REVOKE GRANT OPTION FOR SELECT ON t1 FROM u2;
    ERROR: dependent privileges exist
    HINT: Use CASCADE to revoke them too.
    test=> REVOKE GRANT OPTION FOR SELECT ON t1 FROM u2 CASCADE;
    REVOKE
    test=> RESET ROLE;
    RESET
    test=# \z t1
    Access privileges
    Schema | Name | Type | Access privileges | Column privileges | Policies
    --------+------+-------+---------------------------+-------------------+----------
    public | t1 | table | postgres=arwdDxt/postgres+| |
    | | | u1=r*/postgres +| |
    | | | u2=r/u1 | |
    (1 row)

    u2授予的所有权限均已撤销。

  • 撤销u1的所有权限:

    test=# REVOKE SELECT ON t1 FROM u1;
    ERROR: dependent privileges exist
    HINT: Use CASCADE to revoke them too.
    test=# REVOKE SELECT ON t1 FROM u1 CASCADE;
    REVOKE
    test=# \z t1
    Access privileges
    Schema | Name | Type | Access privileges | Column privileges | Policies
    --------+------+-------+---------------------------+-------------------+----------
    public | t1 | table | postgres=arwdDxt/postgres | |
    (1 row)

    u1直接或间接授予的所有权限都消失了。

关于postgresql - 当REVOKE GRANT被称为PostgreSQL时,二级权限会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59099705/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com