在Debian系统上管理PostgreSQL权限,核心是通过角色(roles)和权限命令实现细粒度控制,以下是关键实践步骤:
创建角色与用户
CREATE ROLE username WITH LOGIN PASSWORD 'password'; -- 普通用户
CREATE ROLE superuser WITH SUPERUSER LOGIN PASSWORD 'password'; -- 超级用户
CREATE ROLE readonly_role WITH NOLOGIN; -- 不可登录的权限组
分配权限
GRANT ALL PRIVILEGES ON DATABASE dbname TO username; -- 授予数据库全部权限
REVOKE ALL PRIVILEGES ON DATABASE dbname FROM username; -- 撤销权限
GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA public TO username; -- 授予表操作权限
GRANT SELECT (col1, col2) ON table_name TO username; -- 授予特定列权限
GRANT SELECT, UPDATE ON ALL SEQUENCES IN SCHEMA public TO username;
角色继承与权限批量管理
CREATE ROLE child_role WITH LOGIN INHERIT;
GRANT parent_role TO child_role;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO readonly_role;
连接访问控制
/etc/postgresql/<version>/main/pg_hba.conf,限制IP或用户访问:# 允许192.168.1.0/24网段用户使用密码认证连接
host all all 192.168.1.0/24 md5
# 仅允许本地超级用户连接
host postgres postgres 127.0.0.1/32 peer
sudo systemctl reload postgresql
权限审计与维护
\du -- 查看所有用户及其角色
\dp -- 查看表/视图权限明细
SELECT * FROM information_schema.role_table_grants WHERE grantee = 'username';
REVOKE ALL PRIVILEGES ON DATABASE dbname FROM username;
DROP ROLE username;
ALL PRIVILEGES。\du和\dp命令定期检查权限分配,清理冗余角色。postgresql.conf中启用SSL,并配置证书。pg_dump备份数据库时,权限信息会包含在备份文件中,恢复时可还原权限结构。参考来源: