Prisma搭配PostgreSQL使用时所需的基础数据库用户权限有哪些
Prisma对接PostgreSQL最小必要权限配置
不需要给Prisma使用的数据库账号授予超级管理员(SUPERUSER)或全库管理员权限,按使用场景拆分配置对应权限即可,推荐将迁移操作账号和日常业务运行账号拆分使用,最大化符合最小权限原则。
一、执行prisma migrate迁移命令所需权限(迁移专用账号配置)
- 基础连接权限:授予账号对目标业务数据库的连接权限
GRANT CONNECT ON DATABASE <你的业务数据库名> TO <prisma迁移专用账号>; - Schema操作权限:授予账号对Prisma使用的目标schema(默认为
public)的使用、创建对象权限,迁移过程中需要创建、修改、删除表、索引、约束、触发器等对象GRANT USAGE, CREATE ON SCHEMA <目标schema名,默认填public> TO <prisma迁移专用账号>; - 存量对象操作权限:如果库内已经存在历史迁移生成的表、序列、函数、视图等对象,需要授予账号这些对象的全量操作权限,否则修改存量对象结构时会触发权限报错
-- 授权schema内所有表的全操作权限 GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA <目标schema名> TO <prisma迁移专用账号>; -- 授权schema内所有序列的全操作权限(自增主键、序列字段操作必需) GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA <目标schema名> TO <prisma迁移专用账号>; -- 授权schema内所有函数的全操作权限 GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA <目标schema名> TO <prisma迁移专用账号>; - 新建对象默认权限:配置默认授权规则,后续迁移新建的表、序列、函数会自动给迁移账号授权,不需要每次新建对象后重复执行赋权操作
ALTER DEFAULT PRIVILEGES IN SCHEMA <目标schema名> GRANT ALL PRIVILEGES ON TABLES TO <prisma迁移专用账号>; ALTER DEFAULT PRIVILEGES IN SCHEMA <目标schema名> GRANT ALL PRIVILEGES ON SEQUENCES TO <prisma迁移专用账号>; ALTER DEFAULT PRIVILEGES IN SCHEMA <目标schema名> GRANT ALL PRIVILEGES ON FUNCTIONS TO <prisma迁移专用账号>;
注意:如果迁移脚本需要创建PostgreSQL扩展(比如uuid-ossp、pgcrypto等),不需要给迁移账号超管权限,提前用超级管理员账号在目标业务库执行CREATE EXTENSION IF NOT EXISTS <扩展名>;完成扩展安装即可。
二、日常业务运行所需权限(业务调用Prisma Client专用账号配置)
日常业务运行不需要修改表结构的权限,可以进一步收缩权限范围,只保留数据读写必需的权限即可:
- 基础连接权限:和迁移账号一致,需要目标数据库的
CONNECT权限 - Schema权限:仅需要目标schema的
USAGE权限,不需要CREATE权限 - 数据操作权限:仅授予业务必需的读写权限,不需要DROP、ALTER等结构修改权限
GRANT CONNECT ON DATABASE <业务数据库名> TO <业务运行账号>; GRANT USAGE ON SCHEMA <目标schema名> TO <业务运行账号>; -- 授予表的业务读写权限,没有删表、改表结构权限 GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA <目标schema名> TO <业务运行账号>; -- 授予序列使用权限,满足自增ID插入需求 GRANT USAGE, SELECT, UPDATE ON ALL SEQUENCES IN SCHEMA <目标schema名> TO <业务运行账号>; -- 授予自定义函数执行权限 GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA <目标schema名> TO <业务运行账号>; -- 配置默认权限,后续新建的业务表自动给运行账号授权 ALTER DEFAULT PRIVILEGES IN SCHEMA <目标schema名> GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO <业务运行账号>; ALTER DEFAULT PRIVILEGES IN SCHEMA <目标schema名> GRANT USAGE, SELECT, UPDATE ON SEQUENCES TO <业务运行账号>; ALTER DEFAULT PRIVILEGES IN SCHEMA <目标schema名> GRANT EXECUTE ON FUNCTIONS TO <业务运行账号>;
常见权限报错对应排查方向
- 报错
permission denied for schema public:检查是否给对应账号授予了schema的USAGE/CREATE权限 - 报错
permission denied for sequence <序列名>:检查是否给账号授予了对应序列的操作权限,自增主键插入场景经常触发这类报错 - 报错
must be owner of relation <表名>:检查账号是否为对应表的所有者,或者是否拿到了对应表的对应操作权限,可以通过ALTER TABLE <表名> OWNER TO <迁移账号>;修正所有者,或者重新执行授权命令 - 报错
permission denied to create extension:切换到超级管理员账号提前安装需要的扩展即可,不需要给业务账号升级超管
内容的提问来源于stack exchange,提问作者Teknoville
相关产品推荐
相关产品推荐

