centos pgadmin权限设置技巧
导读:CentOS 上 pgAdmin 权限设置技巧 一 权限模型与最小权限原则 将权限分为三层: 操作系统层:限制 pgAdmin 安装目录与运行进程的文件系统权限; 数据库层:使用 角色 Role/用户 User 与 GRANT/REVO...
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)对静态资源与目录具备读取权限。
- 安装目录建议由 root 拥有,仅管理员可写,其他用户只读:
- 防火墙放行
- pgAdmin 4 Web 服务默认端口通常为 5050/TCP:
sudo firewall-cmd --permanent --add-port=5050/tcp
sudo firewall-cmd --reload
- pgAdmin 4 Web 服务默认端口通常为 5050/TCP:
- 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
- 常见做法是为静态内容设置 httpd_sys_content_t 上下文:
- 服务与自启
- 启动并开机自启 pgAdmin 服务:
sudo systemctl start pgadmin4
sudo systemctl enable pgadmin4
- 启动并开机自启 pgAdmin 服务:
三 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 并配置证书,避免凭据与数据在网络中被窃听。
- postgresql.conf:
- 审计与日志
- 开启日志收集与轮转:
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 是否生效。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: centos pgadmin权限设置技巧
本文地址: https://pptw.com/jishu/747876.html
