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 只读权限。