如何通过pgAdmin创建用户:自身数据读写,他人数据只读
PostgreSQL 用户权限配置:自身数据读写+其他用户数据只读
以下操作需以超级用户(如postgres)身份在pgAdmin中执行:
1. 创建目标用户(若未创建)
先创建用户并赋予基础访问权限:
-- 创建User B,替换为安全密码 CREATE USER "User B" WITH PASSWORD 'your_secure_password'; -- 授予数据库连接权限,替换为你的数据库名 GRANT CONNECT ON DATABASE your_database_name TO "User B"; -- 授予Zoning schema的使用权限 GRANT USAGE ON SCHEMA Zoning TO "User B";
2. 配置自身创建对象的全权限
确保User B对自己在Zoning schema下创建的所有对象拥有完整读写管理权限:
-- 表权限 ALTER DEFAULT PRIVILEGES FOR ROLE "User B" IN SCHEMA Zoning GRANT ALL PRIVILEGES ON TABLES TO "User B"; -- 序列权限(适配自增字段场景) ALTER DEFAULT PRIVILEGES FOR ROLE "User B" IN SCHEMA Zoning GRANT ALL PRIVILEGES ON SEQUENCES TO "User B"; -- 函数权限(若涉及自定义函数) ALTER DEFAULT PRIVILEGES FOR ROLE "User B" IN SCHEMA Zoning GRANT ALL PRIVILEGES ON FUNCTIONS TO "User B";
3. 授权读取其他用户现有对象
仅设置默认权限无法覆盖已存在的表,需单独授权:
-- 读取Zoning schema下所有现有表 GRANT SELECT ON ALL TABLES IN SCHEMA Zoning TO "User B"; -- 读取现有序列(避免自增字段访问报错) GRANT SELECT, USAGE ON ALL SEQUENCES IN SCHEMA Zoning TO "User B";
4. 授权读取其他用户未来创建的对象
针对特定用户(如User A)的未来对象设置默认只读权限:
-- User A未来创建的表,允许User B读取 ALTER DEFAULT PRIVILEGES FOR ROLE "User A" IN SCHEMA Zoning GRANT SELECT ON TABLES TO "User B"; -- User A未来创建的序列,允许User B读取使用 ALTER DEFAULT PRIVILEGES FOR ROLE "User A" IN SCHEMA Zoning GRANT SELECT, USAGE ON SEQUENCES TO "User B";
若需覆盖多个其他用户,对每个用户重复上述语句即可。
常见失败原因排查
- 遗漏现有对象授权:
ALTER DEFAULT PRIVILEGES仅对执行后创建的对象生效,已存在的表/序列需单独授权。 - 缺少序列权限:带自增字段的表依赖序列,仅授权表的
SELECT会导致访问自增字段时出错。 - 未授予Schema使用权限:无
USAGE ON SCHEMA权限时,无法访问Schema内任何对象。
内容的提问来源于stack exchange,提问作者Chencho Tshering
相关产品推荐
相关产品推荐

