PostgreSQL 创建只读账户

一、创建用户

sql 复制代码
CREATE USER readonly WITH PASSWORD 'readonly';

二、授予只读权限

你可以对一个数据库下的所有表授予只读权限。下面是授予权限的通用步骤:

1. 授予连接权限

sql 复制代码
GRANT CONNECT ON DATABASE mydb TO readonly;

2. 授予 schema 的使用权限

sql 复制代码
GRANT USAGE ON SCHEMA public TO readonly;

如果你使用的是其他 schema,请替换 public

3. 授予所有已有表的 SELECT 权限

sql 复制代码
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;

4. 授予未来表的 SELECT 权限(防止以后新增的表无法访问)

sql 复制代码
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT SELECT ON TABLES TO readonly;

三、禁止写操作

虽然只授予了 SELECT 权限,但你可能仍想防止用户误操作,比如创建表、更新表结构,可以拒绝这些权限:

sql 复制代码
-- 禁止创建表等 DDL 操作
REVOKE CREATE ON SCHEMA public FROM readonly;

四、验证权限

以该用户连接数据库后执行以下命令测试权限:

sql 复制代码
-- 测试查询(应该成功)
SELECT * FROM some_table;

-- 测试写入(应该失败)
INSERT INTO some_table (col) VALUES ('test');
相关推荐
Menior_19 分钟前
【MySQL】基本查询
数据库·mysql
一只游鱼1 小时前
Redis入门(部署、持久化、缓存问题)
数据库·redis·缓存
北城以北88882 小时前
数据库--MySQL数据管理
数据库·mysql
代码的余温2 小时前
Oracle RAC共享存储核心技术
数据库·oracle
float_六七2 小时前
数据库物理外键与逻辑外键全解析
数据库·oracle
大白的编程日记.2 小时前
【MySQL】数据库的基本操作
数据库·mysql·oracle
Jamie Chyi2 小时前
【Oracle经验分享】字符串拼接过长问题的解决方案 —— 巧用 XMLAGG
数据库·oracle
代码的余温2 小时前
Oracle高可用与容灾解决方案
数据库·oracle
小蒜学长6 小时前
基于springboot 校园餐厅预约点餐微信小程序的设计与实现(代码+数据库+LW)
数据库·spring boot·微信小程序
kimble_xia@oracle7 小时前
Oracle打补丁笔记
数据库·oracle