PostgreSQL 可以通過 schema 和 table 級別對資料表進行只讀控制 一般會使用 PostgreSQL 創建只讀使用者,然後給予相應的只讀權限方式實現
通過使用
-- 創建 readonly_user 使用者,密碼為 readonly_password
create user readonly_user with encrypted password 'readonly_password';
-- 設定 readonly_user 使用者為只讀事務
alter user readonly_user set default_transaction_read_only=on;
-- 授予 usage 權限給到 readonly_user 使用者
grant usage on schema "public" to readonly_user;
-- 將默認 "public"schema 下新建表的讀取權限授予給 readonly_user
alter default privileges in schema "public" grant select on tables to readonly_user;
-- 授予 select 權限給到 readonly_user 使用者
grant select on all tables in schema "public" to readonly_user;
grant select on all sequences in schema "public" to readonly_user;
-- 允許 readonly_user 使用者連接到指定資料庫
grant connect on database splrp_dev to readonly_user;
注意: 已有的資料表進行 readonly 設定,可以通過
-- 授予 usage 權限給到 readonly_user 使用者
grant usage on schema "public" to readonly_user;
-- 授予 select 權限給到 readonly_user 使用者
grant select on all tables in schema "public" to readonly_user;
grant select on all sequences in schema "public" to readonly_user;
對於將來創建的新表,則需要通過
-- 將默認 "public"schema 下新建表的讀取權限授予給 readonly_user
alter default privileges in schema "public" grant select on tables to readonly_user;
可以將以後創建的 table 也賦予 readonly_user 只讀權限。