Postgresql

在 postgresql 中創建只讀使用者

  • December 6, 2021

使用,通過以下方式為數據庫pg 13.4創建了一個只讀使用者:reader``abc

CREATE ROLE reader WITH LOGIN PASSWORD 'psssswwwd' 
NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION VALID UNTIL 'infinity';

GRANT CONNECT ON DATABASE abc TO reader;
GRANT USAGE ON SCHEMA public TO reader;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO reader;
GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO reader;

ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO reader;

但是使用者仍然可以創建表,然後插入和刪除該表。

我希望使用者無法對 pg 中的任何數據庫進行任何更改,並且只能連接和讀取數據庫abc

我檢查了https://stackoverflow.com/questions/24332588/read-only-user-able-to-create-table

並嘗試:REVOKE CREATE ON SCHEMA public FROM reader;

但它仍然可以創建表。

有什麼建議嗎?謝謝。

您執行的REVOKE語句撤銷了從未授予的特權,因此它什麼也不做。

如果您查看權限,您將看到該架構publicCREATE授予PUBLIC(即所有人),因此您將不得不撤銷:

REVOKE CREATE ON SCHEMA public FROM PUBLIC;

然後,您必須授予CREATE應該在該模式中創建對象的角色。

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