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');
相关推荐
郑州光合科技余经理23 分钟前
PHP构建:支撑欧美澳市场的同城生活服务平台开发
java·开发语言·数据库·uni-app·php·排序算法·生活
JIngJaneIL9 小时前
基于springboot + vue古城景区管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
微学AI9 小时前
复杂时序场景的突围:金仓数据库是凭借什么超越InfluxDB?
数据库
廋到被风吹走10 小时前
【数据库】【Redis】定位、优势、场景与持久化机制解析
数据库·redis·缓存
有想法的py工程师11 小时前
PostgreSQL + Debezium CDC 踩坑总结
数据库·postgresql
Nandeska11 小时前
2、数据库的索引与底层数据结构
数据结构·数据库
小卒过河010411 小时前
使用apache nifi 从数据库文件表路径拉取远程文件至远程服务器目的地址
运维·服务器·数据库
过期动态11 小时前
JDBC高级篇:优化、封装与事务全流程指南
android·java·开发语言·数据库·python·mysql
Mr.朱鹏11 小时前
SQL深度分页问题案例实战
java·数据库·spring boot·sql·spring·spring cloud·kafka
一位代码11 小时前
mysql | 常见日期函数使用及格式转换方法
数据库·mysql