如何在PgAdmin中创建新用户并一步到位提升数据库管理效率?
- 内容介绍
- 文章标签
- 相关推荐
再看常见痛点,为什么在创建 PgAdmin 使用者时总是卡住?
🔧 权限不足却不知原因——很多新手使用超级使用者登录后仍然遇到 permission denied因为没有正确授予 CREATEROLE 或 LOGIN 权限。
🔧 命令行与图形界面混用导致混乱——在 Linux 程序里创建程序使用者和在 PostgreSQL 里创建登录角色是两码事,容易把两者混为一谈。
🔧 密码安全与加密方式不明确——不清楚 PostgreSQL 10+ 默认使用 SCRAM‑SHA‑256仍旧使用老旧的 MD5,导致登录失败或安全隐患。
🔧 角色权限粒度把握不准——经常出现“给了太多权限”或“权限不足”两极化的问题,影响业务连续性和安全合规。
一步到位这方面,在 PgAdmin 中创建新使用者的完整流程
1️⃣ 前置准备:确保拥有足够的超级权限
-
使用超级使用者(默认
postgres) 登录 PgAdmin。 -
确认当前角色拥有
CREATEROLE/SUPERUSER权限,否则无法创建新角色。 -
Pain point:若提示 “must be superuser to create role”,请先在 psql 中执行
或联系 DBA 获取相应授权。SHELL ALTER ROLE current_user WITH SUPERUSER;不过,
2️⃣ 方法一:通过 SQL 脚本
-- 创建普通登录使用者
CREATE ROLE app_user WITH
LOGIN -- 允许登录
PASSWORD 'YourStrongP@ssw0rd' -- 建议使用 SCRAM-SHA-256
NOSUPERUSER -- 非超级使用者,遵循最小权限原则
NOCREATEDB -- 禁止自行创建数据库
NOCREATEROLE;-- 禁止再创建角色
-- 如需额外权限,可按需添加:
-- GRANT CREATEDB TO app_user;-- 允许创建数据库
-- GRANT CREATEROLE TO app_user;-- 允许创建子角色
3️⃣ 方法二:PgAdmin 图形界面操作
- 打开 PgAdmin,连接到目标服务器。不过,
- 在左侧树形结构中展开"Login/Group Roles"节点。
- 右键 → **Create** → **Login/Group Role**。
-
Name:填写角色名称(如
app_user)。 - Password:输入强密码;推荐勾选 **Encrypt password**。
-
Privileges:
- CAN LOGIN: 勾选。
- SUPERUSER / CREATEDB / CREATEROLE / INHERIT / REPLICATION / BYPASS RLS: 根据业务需求勾选,通常仅保留 CAN LOGIN 与 INHERIT。
- LImits :
- 点击 **Save** 完成创建。
⚠️ 常见错误及对应方法
-
Error:
No permission to create role.Solve: 确认当前登录角色拥有 `CREATEROLE` 或 `SUPERUSER` 权限;必要时切换至 `postgres` 超级使用者。按理说, -
Error:
Password auntication failed for user "app_user".Solve: 检查 `pg_hba.conf` 中对应数据库、IP、认证方式是否允许 SCRAM‑SHA‑256;修改后记得重启 PostgreSQL 服务:
SHELL
sudo systemctl restart postgresql
# 或者
pg_ctl reload -D /var/lib/postgresql/data
4️⃣ 授权数据库访问:让新使用者真正“上岗” 🚀
a) 为特定数据库授予 CONNECT 与 USAGE 权限
GRANT CONNECT ON DATABASE mydb TO app_user;GRANT USAGE ON SCHEMA public TO app_user;GRANT SELECT,INSERT,UPDATE。
DELETE ON ALL TABLES IN SCHEMA public TO app_user;-- 若希望以后自动继承新建表的权限:
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT。INSERT,UPDATE,DELETE ON TABLES TO app_user;
b) 如需管理整个库。可一次性赋予 CREATEDB/CREATEROLE 权限:
GRANT CREATEDB,CREATEROLE TO app_user;--,
5️⃣ 验证新使用者是否可用 — 实时检测是否成功上线 🎯
SHELL
psql -U app_user -d mydb -h localhost -p 5432 -W
# 输入刚才设置的密码,如果能进入交互式终端即表示成功。\dt # 列出表,检查是否有预期的访问权。\q
Pain point:If you receive “FATAL: password auntication failed for user”,double‑check password encryption method in `pg_hba.conf` and ensure role’s password was saved correctly in PgAdmin.
6️⃣ 如何通过“一键”提高整体数据库管理效率?不过,💡
- #模板化脚本: 将上述 SQL 块保存为 `.sql` 文件,账户。
- #角色继承模型: 建立基础模板角色。新使用者只需 `Add member of...` 即可获得完整权限集合,避免重复配置。
- #审计日志 + 自动提醒: 开启 PostgreSQL 的 `log_connections` 与 `log_disconnections`,配合监控网站实时告警异常登录行为。
DO $$
DECLARE
new_pwd text := substr::text)。1,12),BEGIN
ALTER ROLE app_user WITH PASSWORD new_pwd;RAISE NOTICE 'New password for % is %'。'app_user',new_pwd;END $$,-- 将生成的密码写入安全渠道。怎么说呢,
7️⃣ 常用方法清单 – 保持安全、可维护、高效 🚦
| # 项目 | 要点说明 | |
|---|---|---|
| 1️⃣ | - 使用SCRAM‑SHA‑256 替代 MD5
- 在 `/etc/postgresql/ | |
| 2️⃣ | - 按照"最小特权原则" 分配权限 - 除非必须,不要授予 SUPERUSER。 | |
| 3️⃣ | - 将通用权限抽象为模板角色。如 `role_readonly`,`role_dev` - 新建使用者只需加入相应模板即可。 | |
| 4️⃣ | - 定期审计:每月跑一次查询查看拥有高危权限的角色 ` SELECT rolname FROM pg_roles WHERE rolsuper OR rolcreaterole OR rolcreatedb;` 并根据业务需求逐步收紧。 | |
| 5️⃣ | - 启用审计日志并结合外部 SIEM 程序监控异常登录或授权变更。 | |
| 6️⃣ | - 对关键业务库做只读复制,让运维人员可以在只读节点上进行查询而不影响主库性能。 | |
| 7️⃣ | - 使用 pgAdmin 的 “Dashboard” 页面实时监控连接数、锁等待等指标,一键定位性能瓶颈。 |
8️⃣ 小结 – 用对工具、走对流程,让数据库管理更轻松 🎉
* 先确认超级权限 → 用 SQL 脚本或 PgAdmin UI 创建角色 → 正确设置密码加密方式 → 按业务需求授予最小必要权限 → 验证登录 → 建立模板角色 & 自动化脚本 → 定期审计 & 监控。*
A well‑structured “Create User + Grant Privileges” workflow not only eliminates trial‑and‑error pain many DBAs face but also builds a repeatable pattern that scales with team growth and compliance demands.
© 2024 数据库管理实战教程. 保留所有权利.
再看常见痛点,为什么在创建 PgAdmin 使用者时总是卡住?
🔧 权限不足却不知原因——很多新手使用超级使用者登录后仍然遇到 permission denied因为没有正确授予 CREATEROLE 或 LOGIN 权限。
🔧 命令行与图形界面混用导致混乱——在 Linux 程序里创建程序使用者和在 PostgreSQL 里创建登录角色是两码事,容易把两者混为一谈。
🔧 密码安全与加密方式不明确——不清楚 PostgreSQL 10+ 默认使用 SCRAM‑SHA‑256仍旧使用老旧的 MD5,导致登录失败或安全隐患。
🔧 角色权限粒度把握不准——经常出现“给了太多权限”或“权限不足”两极化的问题,影响业务连续性和安全合规。
一步到位这方面,在 PgAdmin 中创建新使用者的完整流程
1️⃣ 前置准备:确保拥有足够的超级权限
-
使用超级使用者(默认
postgres) 登录 PgAdmin。 -
确认当前角色拥有
CREATEROLE/SUPERUSER权限,否则无法创建新角色。 -
Pain point:若提示 “must be superuser to create role”,请先在 psql 中执行
或联系 DBA 获取相应授权。SHELL ALTER ROLE current_user WITH SUPERUSER;不过,
2️⃣ 方法一:通过 SQL 脚本
-- 创建普通登录使用者
CREATE ROLE app_user WITH
LOGIN -- 允许登录
PASSWORD 'YourStrongP@ssw0rd' -- 建议使用 SCRAM-SHA-256
NOSUPERUSER -- 非超级使用者,遵循最小权限原则
NOCREATEDB -- 禁止自行创建数据库
NOCREATEROLE;-- 禁止再创建角色
-- 如需额外权限,可按需添加:
-- GRANT CREATEDB TO app_user;-- 允许创建数据库
-- GRANT CREATEROLE TO app_user;-- 允许创建子角色
3️⃣ 方法二:PgAdmin 图形界面操作
- 打开 PgAdmin,连接到目标服务器。不过,
- 在左侧树形结构中展开"Login/Group Roles"节点。
- 右键 → **Create** → **Login/Group Role**。
-
Name:填写角色名称(如
app_user)。 - Password:输入强密码;推荐勾选 **Encrypt password**。
-
Privileges:
- CAN LOGIN: 勾选。
- SUPERUSER / CREATEDB / CREATEROLE / INHERIT / REPLICATION / BYPASS RLS: 根据业务需求勾选,通常仅保留 CAN LOGIN 与 INHERIT。
- LImits :
- 点击 **Save** 完成创建。
⚠️ 常见错误及对应方法
-
Error:
No permission to create role.Solve: 确认当前登录角色拥有 `CREATEROLE` 或 `SUPERUSER` 权限;必要时切换至 `postgres` 超级使用者。按理说, -
Error:
Password auntication failed for user "app_user".Solve: 检查 `pg_hba.conf` 中对应数据库、IP、认证方式是否允许 SCRAM‑SHA‑256;修改后记得重启 PostgreSQL 服务:
SHELL
sudo systemctl restart postgresql
# 或者
pg_ctl reload -D /var/lib/postgresql/data
4️⃣ 授权数据库访问:让新使用者真正“上岗” 🚀
a) 为特定数据库授予 CONNECT 与 USAGE 权限
GRANT CONNECT ON DATABASE mydb TO app_user;GRANT USAGE ON SCHEMA public TO app_user;GRANT SELECT,INSERT,UPDATE。
DELETE ON ALL TABLES IN SCHEMA public TO app_user;-- 若希望以后自动继承新建表的权限:
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT。INSERT,UPDATE,DELETE ON TABLES TO app_user;
b) 如需管理整个库。可一次性赋予 CREATEDB/CREATEROLE 权限:
GRANT CREATEDB,CREATEROLE TO app_user;--,
5️⃣ 验证新使用者是否可用 — 实时检测是否成功上线 🎯
SHELL
psql -U app_user -d mydb -h localhost -p 5432 -W
# 输入刚才设置的密码,如果能进入交互式终端即表示成功。\dt # 列出表,检查是否有预期的访问权。\q
Pain point:If you receive “FATAL: password auntication failed for user”,double‑check password encryption method in `pg_hba.conf` and ensure role’s password was saved correctly in PgAdmin.
6️⃣ 如何通过“一键”提高整体数据库管理效率?不过,💡
- #模板化脚本: 将上述 SQL 块保存为 `.sql` 文件,账户。
- #角色继承模型: 建立基础模板角色。新使用者只需 `Add member of...` 即可获得完整权限集合,避免重复配置。
- #审计日志 + 自动提醒: 开启 PostgreSQL 的 `log_connections` 与 `log_disconnections`,配合监控网站实时告警异常登录行为。
DO $$
DECLARE
new_pwd text := substr::text)。1,12),BEGIN
ALTER ROLE app_user WITH PASSWORD new_pwd;RAISE NOTICE 'New password for % is %'。'app_user',new_pwd;END $$,-- 将生成的密码写入安全渠道。怎么说呢,
7️⃣ 常用方法清单 – 保持安全、可维护、高效 🚦
| # 项目 | 要点说明 | |
|---|---|---|
| 1️⃣ | - 使用SCRAM‑SHA‑256 替代 MD5
- 在 `/etc/postgresql/ | |
| 2️⃣ | - 按照"最小特权原则" 分配权限 - 除非必须,不要授予 SUPERUSER。 | |
| 3️⃣ | - 将通用权限抽象为模板角色。如 `role_readonly`,`role_dev` - 新建使用者只需加入相应模板即可。 | |
| 4️⃣ | - 定期审计:每月跑一次查询查看拥有高危权限的角色 ` SELECT rolname FROM pg_roles WHERE rolsuper OR rolcreaterole OR rolcreatedb;` 并根据业务需求逐步收紧。 | |
| 5️⃣ | - 启用审计日志并结合外部 SIEM 程序监控异常登录或授权变更。 | |
| 6️⃣ | - 对关键业务库做只读复制,让运维人员可以在只读节点上进行查询而不影响主库性能。 | |
| 7️⃣ | - 使用 pgAdmin 的 “Dashboard” 页面实时监控连接数、锁等待等指标,一键定位性能瓶颈。 |
8️⃣ 小结 – 用对工具、走对流程,让数据库管理更轻松 🎉
* 先确认超级权限 → 用 SQL 脚本或 PgAdmin UI 创建角色 → 正确设置密码加密方式 → 按业务需求授予最小必要权限 → 验证登录 → 建立模板角色 & 自动化脚本 → 定期审计 & 监控。*
A well‑structured “Create User + Grant Privileges” workflow not only eliminates trial‑and‑error pain many DBAs face but also builds a repeatable pattern that scales with team growth and compliance demands.
© 2024 数据库管理实战教程. 保留所有权利.

