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');
相关推荐
望获linux9 分钟前
【Linux基础知识系列】第六十四篇 - 了解Linux的硬件架构
linux·运维·服务器·开发语言·数据库·操作系统·嵌入式软件
全栈小519 分钟前
【数据库】使用Sql Server将分组后指定字段的行数据转为一个字段显示,并且以逗号隔开每个值,收藏不迷路
数据库·sql server
JohnYan39 分钟前
工作笔记 - 一种业务信息汇报机制的设计和实现
数据库·后端·postgresql
sq8001 小时前
EFCore ORM 数据库数据表迁移
数据库·后端·orm
小徐不徐说2 小时前
深入理解 Qt 信号与槽机制的底层逻辑
数据库·c++·qt·面试
一只小小汤圆2 小时前
qt 心跳包
服务器·数据库·qt
巴里巴气2 小时前
MongoDB事务和隔离级别的原理
数据库·mongodb
什么半岛铁盒2 小时前
MySQL的常用数据类型详解
linux·数据库·mysql·adb
rannn_1113 小时前
【MySQL学习|黑马笔记|Day1】数据库概述,SQL|通用语法、SQL分类、DDL
数据库·后端·学习·mysql
mrbone113 小时前
C++-关于协程的一些思考
开发语言·数据库·c++·c++20·协程·异步·coroutines