pgsql指定用户看到某个表
你的核心诉求
- 单独隔离密码:不希望把包含所有核心数据的管理员连接(
postgres)交给外部或测试程序,而是想单独为某些库设置一套专属密码。 - 通配/批量权限:希望该用户(
demo)只能访问以特定前缀(如demo_)命名的数据库,且无法触碰主库或系统库。 - 基于已有库克隆:新库的内容往往来自已有的生产库或模板库。
- 最小权限原则:不希望给
demo过高的权限(如全局创建新数据库的特权)。
踩坑复盘(为什么 PG 感觉繁琐)
- 通配符不支持:PostgreSQL 无法像 MySQL 一样直接一条
GRANT ... ON demo_%,权限必须按库、按表显式授权。 - 所有权割裂问题:如果用管理员账号克隆/传输数据到新库,库里的表所有权依然属于管理员,导致
demo连进去后报42501 permission denied。 - 特权受限:直接给普通用户提权建库又违背了权限隔离的初衷。
最终最佳实践方案(一劳永逸版)
只要遵循 “管理员建空壳,demo 自己搬家具” 的原则,后续再做类似的库克隆,只需两分钟且不需要背任何赋权 SQL:
第一步:创建受限用户(仅需一次)
用管理员执行,创建一个只用于特定业务的普通账号:
CREATE USER demo WITH PASSWORD '你的强密码';
第二步:管理员建空库并直接指定归属
每次需要基于老库给 demo 派生新库时,管理员仅负责建一个空库,把产权直接写成 demo:
CREATE DATABASE demo_blog OWNER demo;
(这样 demo 依然没有全局建库权限,安全可控。)
第三步:以 demo 的身份导入数据
在 Navicat 中使用 阿里云-demo用户 连接这个新库 demo_blog,执行数据传输或运行建表迁移脚本:
- 因为数据是
demo亲自导入的,库内所有表、视图、序列天然归demo所有。 - 后端程序使用
demo账号连接,查表、增删改查畅通无阻,彻底告别权限报错。

浙公网安备 33010602011771号