1. 前提准备:安装pgAdmin与PostgreSQL
在Debian系统上,首先需要安装pgAdmin和PostgreSQL数据库服务。通过以下命令完成安装:
sudo apt update
sudo apt install curl gpg gnupg2 software-properties-common apt-transport-https lsb-release ca-certificates -y
# 添加pgAdmin官方存储库
curl -fsSL https://www.pgadmin.org/static/packages_pgadmin_org.pub | sudo gpg --dearmor -o /usr/share/keyrings/packages-pgadmin-org.gpg
echo "deb [signed-by=/usr/share/keyrings/packages-pgadmin-org.gpg] https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/$(lsb_release -cs) pgadmin4 main" | sudo tee /etc/apt/sources.list.d/pgadmin4.list
sudo apt update
sudo apt install pgadmin4 postgresql postgresql-contrib -y
安装完成后,启动PostgreSQL服务并设置开机自启:
sudo systemctl start postgresql
sudo systemctl enable postgresql
2. 配置pgAdmin Web服务
运行pgAdmin初始化脚本,创建管理员用户(用于登录Web界面):
sudo /usr/pgadmin4/bin/setup-web.sh
按照提示输入邮箱(作为登录用户名)和密码,完成初始化。启动pgAdmin服务并设置开机自启:
sudo systemctl start pgadmin4
sudo systemctl enable pgadmin4
配置防火墙允许pgAdmin默认端口(5050)的访问:
sudo ufw allow 5050/tcp
sudo ufw enable
通过浏览器访问http://your_server_ip:5050,使用管理员邮箱和密码登录pgAdmin Web界面。
3. 创建pgAdmin用户并分配权限(图形界面操作)
登录pgAdmin后,右键点击左侧“Servers”节点下的目标服务器(如“PostgreSQL-Prod”),选择“Properties”。切换至“Security” tab,点击“Add”按钮创建用户:
dev_user)和Password(如SecurePass123);若需分配数据库级别的权限,展开左侧“Servers” -> 目标服务器 -> “Databases”,右键点击需要授权的数据库(如mydb),选择“Properties”。切换至“Permissions” tab,点击“Add”添加用户(如dev_user),勾选所需权限(如SELECT、INSERT、UPDATE、DELETE),点击“Save”保存。
4. 底层系统用户与组管理(增强安全性)
为隔离pgAdmin用户与系统用户的权限,建议为每个pgAdmin用户创建对应的系统用户(无需登录shell):
sudo adduser --system --no-create-home --shell /bin/false dev_user
将系统用户加入pgAdmin默认组(pgadmin,若未创建则手动创建),并设置pgAdmin目录权限:
sudo usermod -aG pgadmin dev_user
sudo chown -R root:pgadmin /usr/pgadmin4
sudo chmod -R 750 /usr/pgadmin4
这样,只有pgadmin组的用户才能访问pgAdmin的配置文件和数据目录。
5. PostgreSQL数据库用户同步(可选但推荐)
若需让pgAdmin用户直接访问PostgreSQL数据库(而非仅管理pgAdmin界面),需在PostgreSQL中创建对应用户并授权。切换到postgres用户,使用psql命令行操作:
sudo su - postgres
psql
在psql中执行以下命令:
-- 创建数据库用户
CREATE USER dev_user WITH PASSWORD 'your_password';
-- 创建数据库并设置所有者
CREATE DATABASE mydb OWNER dev_user;
-- 授予数据库所有权限
GRANT ALL PRIVILEGES ON DATABASE mydb TO dev_user;
-- 退出psql
\q
之后,在pgAdmin中添加服务器连接时,使用该PostgreSQL用户(如dev_user)进行认证,即可直接管理数据库。
6. 高级权限配置(可选)
若需要更细粒度的权限控制(如表级、列级权限),可通过PostgreSQL的GRANT语句实现。例如,授予dev_user对mydb数据库中public schema的所有表的SELECT权限:
GRANT SELECT ON ALL TABLES IN SCHEMA public TO dev_user;
若需撤销权限,可使用REVOKE语句:
REVOKE SELECT ON ALL TABLES IN SCHEMA public FROM dev_user;
查看角色权限可使用以下命令:
\du+ -- 查看角色列表及权限
SELECT table_catalog, table_schema, table_name, privilege_type
FROM information_schema.table_privileges
WHERE grantee = 'dev_user'; -- 查看指定角色的表级权限