Debian PostgreSQL权限设置基于角色(用户)和权限分级管理,核心操作如下:
CREATE USER 用户名 WITH PASSWORD '密码'; -- 创建可登录用户
CREATE ROLE 角色名 WITH LOGIN PASSWORD '密码'; -- 创建带权限的角色
DROP USER 用户名;
DROP ROLE 角色名;
ALTER USER 用户名 WITH PASSWORD '新密码';
GRANT ALL PRIVILEGES ON DATABASE 数据库名 TO 用户名/角色名; -- 授予所有权限
REVOKE ALL PRIVILEGES ON DATABASE 数据库名 FROM 用户名/角色名; -- 撤销权限
GRANT SELECT, INSERT, UPDATE, DELETE ON 表名 TO 用户名/角色名; -- 授予增删改查权限
GRANT SELECT(列名1, 列名2) ON 表名 TO 用户名/角色名; -- 授予特定列权限
GRANT USAGE ON SCHEMA 公共模式名 TO 用户名/角色名; -- 允许访问模式
GRANT CREATE ON SCHEMA 公共模式名 TO 用户名/角色名; -- 允许创建对象
GRANT SELECT, UPDATE ON SEQUENCE 序列名 TO 用户名/角色名; -- 控制序列访问
GRANT EXECUTE ON FUNCTION 函数名(参数类型) TO 用户名/角色名;
CREATE ROLE 父角色名 WITH LOGIN PASSWORD '密码' INHERIT;
CREATE ROLE 子角色名 WITH LOGIN PASSWORD '密码' INHERIT;
GRANT 父角色名 TO 子角色名; -- 子角色继承父角色权限
ALTER DEFAULT PRIVILEGES IN SCHEMA 公共模式名
GRANT SELECT ON TABLES TO 用户名/角色名; -- 新建表自动继承SELECT权限
\du -- 查看所有用户及角色
\dp 表名 -- 查看表级权限
SELECT * FROM information_schema.role_table_grants WHERE grantee = '用户名'; -- 详细权限明细
REVOKE 权限类型 ON 对象 FROM 用户名/角色名; -- 撤销已授予权限
编辑 /etc/postgresql/{版本}/main/pg_hba.conf
,配置客户端访问规则,例如:
# 允许本地所有用户通过密码认证访问所有数据库
host all all 127.0.0.1/32 md5
# 允许特定IP段访问指定数据库
host mydb myuser 192.168.1.0/24 md5
修改后需重启服务生效:
sudo systemctl restart postgresql
\du
和information_schema
查询权限分配情况,确保合规。以上操作需在postgres
用户或具有超级权限的角色下执行,涉及生产环境建议提前备份数据库。