centos pgadmin权限设置技巧
小樊
40
2025-11-14 02:26:55
CentOS 上 pgAdmin 权限设置技巧
一 权限模型与最小权限原则
将权限分为三层:
操作系统层 :限制 pgAdmin 安装目录与运行进程的文件系统权限;
数据库层 :使用 角色 Role/用户 User 与 GRANT/REVOKE 精细授权;
网络与 SELinux :仅开放必要端口,必要时调整 SELinux 布尔值或上下文。
建议遵循最小权限:日常运维使用非超级用户,按需授予 CONNECT/CREATE/USAGE/SELECT/INSERT/UPDATE/DELETE 等权限,避免滥用 SUPERUSER 。
通过 角色聚合权限 再赋给用户,便于批量授权与回收。
二 操作系统与网络权限
文件系统权限
安装目录建议由 root 拥有,仅管理员可写,其他用户只读:
sudo chown -R root:root /usr/pgsql/pgadmin4
sudo chmod -R 755 /usr/pgsql/pgadmin4
若通过 Apache/Nginx 代理,确保运行用户(如 apache/nginx )对静态资源与目录具备读取权限。
防火墙放行
pgAdmin 4 Web 服务默认端口通常为 5050/TCP :
sudo firewall-cmd --permanent --add-port=5050/tcp
sudo firewall-cmd --reload
SELinux 与布尔值
常见做法是为静态内容设置 httpd_sys_content_t 上下文:
sudo yum install -y policycoreutils-python-utils
sudo semanage fcontext -a -t httpd_sys_content_t “/usr/pgsql/pgadmin4(/.*)?”
sudo restorecon -Rv /usr/pgsql/pgadmin4
若 pgAdmin 需要连接数据库,启用布尔值:
sudo setsebool -P httpd_can_network_connect_db 1
服务与自启
启动并开机自启 pgAdmin 服务:
sudo systemctl start pgadmin4
sudo systemctl enable pgadmin4
三 PostgreSQL 数据库权限配置
创建角色与用户
登录数据库:sudo -u postgres psql
创建只读用户与读写用户:
CREATE ROLE app_read WITH LOGIN PASSWORD ‘StrongPass!’;
CREATE ROLE app_write WITH LOGIN PASSWORD ‘StrongPass!’;
授权范式(最小权限示例)
只读用户:
GRANT CONNECT ON DATABASE mydb TO app_read;
GRANT USAGE ON SCHEMA public TO app_read;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO app_read;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO app_read;
读写用户:
GRANT CONNECT ON DATABASE mydb TO app_write;
GRANT USAGE, CREATE ON SCHEMA public TO app_write;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO app_write;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO app_write;
GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO app_write;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT USAGE, SELECT ON SEQUENCES TO app_write;
回收与撤销:
REVOKE ALL PRIVILEGES ON DATABASE mydb FROM app_read;
REVOKE ALL PRIVILEGES ON SCHEMA public FROM app_read;
通过 pgAdmin 图形界面:在左侧导航创建/编辑 登录角色(Login/Role) ,并在目标 数据库/模式/表 的 权限 页签为用户或角色授予相应权限。
四 访问控制与加密
pg_hba.conf 精细化访问控制
示例(仅允许内网与本地):
host all all 127.0.0.1/32 md5
host all all 192.168.1.0/24 md5
修改后重载:sudo systemctl reload postgresql
SSL 加密传输
postgresql.conf:
ssl = on
ssl_cert_file = ‘/var/lib/pgsql/data/server.crt’
ssl_key_file = ‘/var/lib/pgsql/data/server.key’
pgAdmin 连接服务器时勾选 Use SSL 并配置证书,避免凭据与数据在网络中被窃听。
审计与日志
开启日志收集与轮转:
logging_collector = on
log_directory = ‘pg_log’
log_filename = ‘postgresql-%Y-%m-%d_%H%M%S.log’
安全运维
定期更新系统与软件包:sudo yum update -y
修改默认密码,限制数据库与 pgAdmin 的对外暴露面,仅开放必要端口与网段。
五 常见场景与命令清单
只读账号快速模板
psql -U postgres -c “CREATE ROLE app_read WITH LOGIN PASSWORD ‘StrongPass!’;”
psql -U postgres -c “GRANT CONNECT ON DATABASE mydb TO app_read;”
psql -U postgres -c “GRANT USAGE ON SCHEMA public TO app_read;”
psql -U postgres -c “GRANT SELECT ON ALL TABLES IN SCHEMA public TO app_read;”
psql -U postgres -c “ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO app_read;”
读写账号快速模板
psql -U postgres -c “CREATE ROLE app_write WITH LOGIN PASSWORD ‘StrongPass!’;”
psql -U postgres -c “GRANT CONNECT ON DATABASE mydb TO app_write;”
psql -U postgres -c “GRANT USAGE, CREATE ON SCHEMA public TO app_write;”
psql -U postgres -c “GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO app_write;”
psql -U postgres -c “ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO app_write;”
psql -U postgres -c “GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO app_write;”
psql -U postgres -c “ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT USAGE, SELECT ON SEQUENCES TO app_write;”
网络与 SELinux
放行端口:sudo firewall-cmd --permanent --add-port=5050/tcp && sudo firewall-cmd --reload
SELinux 布尔值:sudo setsebool -P httpd_can_network_connect_db 1
服务管理
启动/自启:sudo systemctl start pgadmin4 && sudo systemctl enable pgadmin4
验证要点
使用只读账号尝试 INSERT/UPDATE 应被拒绝;
使用应用账号验证是否能正常读写与创建对象;
检查服务器与客户端之间的 SSL 是否生效。