在Ubuntu上安装pgAdmin(以pgAdmin4为例),推荐通过APT包管理器安装(官方源,安全性高):
sudo apt update
sudo apt install pgadmin4
安装过程中会提示设置pgAdmin的Web访问密码(用于后续登录Web界面)。安装完成后,可通过浏览器访问http://localhost:5050进入pgAdmin Web界面。
在pgAdmin Web界面左侧导航栏,右键点击Servers→Create→Server…,填写服务器信息:
Host name/address为localhost(本地连接)、Port为5432(默认端口)、Username为PostgreSQL管理员账号(如postgres)、Password为管理员密码。权限管理的核心是用户(Login Role)和角色(Role)。pgAdmin支持两种方式创建:
方式一:通过pgAdmin图形界面
展开已连接的服务器节点,右键点击Login/Group Roles→Create→Login/Group Role…,填写以下信息:
app_user)、密码(如StrongPassword123);Can create databases允许创建数据库、Can create roles允许创建角色);Login(表示该角色可登录数据库)。方式二:通过PostgreSQL命令行(更灵活)
切换到postgres用户,执行以下命令:
sudo -u postgres psql
# 创建用户(角色)并设置密码
CREATE USER app_user WITH PASSWORD 'StrongPassword123';
# 授予数据库权限(如允许访问名为`mydb`的数据库)
GRANT ALL PRIVILEGES ON DATABASE mydb TO app_user;
# 退出命令行
\q
注:
GRANT ALL PRIVILEGES表示授予该数据库的所有权限(生产环境建议按需分配,如SELECT、INSERT)。
权限可分为数据库级别(控制用户能否访问数据库)和表级别(控制用户能否操作表中的数据):
数据库级别权限
展开服务器节点→Databases→右键目标数据库→Properties→切换至Permissions标签,在Role列表中选择目标用户/角色,点击Add→选择权限(如SELECT、INSERT、UPDATE、DELETE、ALL),点击Save。
表级别权限
展开服务器节点→Databases→目标数据库→Schemas→Public(或自定义模式)→Tables→右键目标表→Properties→切换至Permissions标签,同样选择用户/角色并分配权限(如SELECT允许查询、INSERT允许插入)。
注:也可通过SQL命令快速分配表级权限:
GRANT SELECT, INSERT ON TABLE mytable TO app_user;
为增强安全性,需修改PostgreSQL的pg_hba.conf文件(控制客户端认证方式):
sudo nano /etc/postgresql/<version>/main/pg_hba.conf
找到类似以下的行(host表示允许TCP连接),修改为仅允许特定IP访问(如192.168.1.100):
# TYPE DATABASE USER ADDRESS METHOD
host all all 192.168.1.100/32 md5
保存后重启PostgreSQL服务:
sudo systemctl restart postgresql
使用新创建的用户(如app_user)登录pgAdmin或PostgreSQL命令行,尝试执行操作:
app_user的用户名和密码连接;psql -U app_user -d mydb -h localhost
尝试执行SELECT * FROM mytable;(若授予权限则成功,否则报错)。postgres管理员密码复杂(包含大小写字母、数字、符号);ufw限制pgAdmin端口(默认5050)的访问:sudo ufw allow from 192.168.1.100 to any port 5050
sudo ufw enable
通过以上步骤,即可完成Ubuntu系统下pgAdmin的权限设置,实现对PostgreSQL数据库的精细化访问控制。