Permissions

無法撤銷 postgresql 使用者的預設權限

  • September 11, 2015

我正在使用 psql 工具:

命令:

my_db=# \ddp

結果:

                        Default access privileges
    Owner      | Schema |   Type   |          Access privileges
----------------+--------+----------+--------------------------------------
postgres       | kpi    | function | kpi_updater=X/postgres              +
               |        |          | intranet2=X/postgres
postgres       | kpi    | sequence | kpi_updater=rwU/postgres            +
               |        |          | intranet2=rwU/postgres
postgres       | kpi    | table    | kpi_updater=arwdDxt/postgres        +
               |        |          | intranet2=arwdDxt/postgres
postgres       | kpi    | type     | kpi_updater=U/postgres              +
               |        |          | intranet2=U/postgres

接下來我使用以下命令,它返回沒有錯誤:

ALTER DEFAULT PRIVILEGES IN SCHEMA kpi REVOKE EXECUTE ON FUNCTIONS FROM intranet2;

我再次執行 \ddp 並且……我得到完全相同的結果:預設權限沒有被修改。

我在這裡想念什麼?

謝謝 !

編輯回答與\ddp命令相關的問題,而不是\dp@personne3000 在下面的評論中指出的命令。

您可能想使用ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA kpi REVOKE EXECUTE ON FUNCTIONS FROM intranet2;

這是因為postgres使用者在架構中的函式上被授予預設權限執行,kpi並且正在將其授予intranet2,正如權限所指出的那樣intranet2=X/postgres

我創建了一個小例子來說明發生了什麼。

pgsql@[local]:5432:pgsql:=# CREATE ROLE bob;
CREATE ROLE
Time: 0.526 ms
pgsql@[local]:5432:pgsql:=# CREATE SCHEMA we_like_bob;
CREATE SCHEMA
Time: 0.608 ms

pgsql@[local]:5432:pgsql:=# ALTER DEFAULT PRIVILEGES FOR ROLE bob IN SCHEMA we_like_bob GRANT EXECUTE ON FUNCTIONS TO pgsql;
ALTER DEFAULT PRIVILEGES
Time: 1.480 ms
pgsql@[local]:5432:pgsql:=# \ddp
            Default access privileges
Owner |   Schema    |   Type   | Access privileges 
-------+-------------+----------+-------------------
bob   | we_like_bob | function | pgsql=X/bob
(1 row)

使用者 pgsql 具有 bob 授予的執行權限 X。

嘗試撤銷角色 pgsql 的執行權限,作為 pgsql(超級使用者)。

pgsql@[local]:5432:pgsql:=# ALTER DEFAULT PRIVILEGES FOR ROLE pgsql IN SCHEMA we_like_bob REVOKE EXECUTE ON FUNCTIONS FROM pgsql;
ALTER DEFAULT PRIVILEGES
Time: 0.176 ms
pgsql@[local]:5432:pgsql:=# \ddp
            Default access privileges
Owner |   Schema    |   Type   | Access privileges 
-------+-------------+----------+-------------------
bob   | we_like_bob | function | pgsql=X/bob
(1 row)

不起作用,因為該命令沒有刪除 bob 角色將函式執行權限授予角色 pgsql 的預設能力,而是刪除了 pgsql 角色從 pgsql 撤消函式執行的能力。

如果我們更改它以從角色 pgsql 的 bob 角色中刪除執行權限,那麼它可以工作。

pgsql@[local]:5432:pgsql:=# ALTER DEFAULT PRIVILEGES FOR ROLE bob IN SCHEMA we_like_bob REVOKE EXECUTE ON FUNCTIONS FROM pgsql;
ALTER DEFAULT PRIVILEGES
Time: 0.644 ms
pgsql@[local]:5432:pgsql:=# \ddp
        Default access privileges
Owner | Schema | Type | Access privileges 
-------+--------+------+-------------------
(0 rows)

pgsql@[local]:5432:pgsql:=#

引用自:https://dba.stackexchange.com/questions/114763