Permissions
無法撤銷 postgresql 使用者的預設權限
我正在使用 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:=#