如何查询数据库密码设置的详细信息?
- 内容介绍
- 文章标签
- 相关推荐
在日常运维或开发过程中,很多 DBA 和开发者都会面临以下痛点:
- 不知道如何安全、合法地查询到数据库使用者的密码。
- 担心使用不当的查询语句导致密码泄露或程序安全风险。话说回来,
- 缺乏统一的操作手册。不同数据库之间查询方式差异大。
一、为何查询数据库密码本身就是风险?
数据库密码通常以哈希形式存储,直接明文查询几乎不可能。即使能够获取到哈希值,也必须在拥有足够权限且具备合法业务需求的前提下操作。随意使用 SELECT 语句读取使用者表,往往会导致:
- 敏感信息在日志中被记录。
- 权限过度暴露,引发审计合规问题。
- 误操作导致账号被锁或服务不可用。
二、不同数据库的密码查询与重置方法
1. MySQL / MariaDB
常见误区:直接 SELECT password FROM mysql.user; 读取明文密码,这在现代 MySQL 已经不可行且极不安全。
a) 使用程序视图查看授权信息
# 查看当前使用者拥有的权限
SHOW GRANTS FOR 'username'@'host';
b) 查询密码哈希
# 仅返回密码哈希值
SELECT user,auntication_string FROM mysql.user WHERE user='username';
c) 安全地重置密码
# 使用 ALTER USER 重置
ALTER USER 'username'@'host' IDENTIFIED BY 'NewStrongPassword!',# 或者使用 SET PASSWORD
SET PASSWORD FOR 'username'@'host' = PASSWORD;
2. PostgreSQL
痛点:不少人不知道 PostgreSQL 的认证信息保存在两个地方:pg_hba.conf 与程序表。
a) 查看认证方式
`pg_hba.conf` 文件定义了每个连接的认证方式。
# 常用方法
/etc/postgresql/12/main/pg_hba.conf
# 示例行
host all all 0.0.0.0/0 md5
b) 查询程序表中的加密口令
# pg_user 表不再存放口令。但可以确认是否需要口令
SELECT usename,usesysid FROM pg_user WHERE usename='username';# 若想检查加密方式,可查看 pg_authid
SELECT rolname。rolpassword FROM pg_authid WHERE rolname='username';
c) 安全地修改密码
# ALTER USER 是推荐方式
ALTER USER username WITH PASSWORD 'NewStrongPassword!
',# 对于 SCRAM‑SHA‑256 可额外指定加密方式
ALTER USER username WITH ENCRYPTED PASSWORD 'NewStrongPassword!',
3. Oracle Database
Pain Point:Oracle 将口令以散列形式保存在 dba_users/user$ 表中,普通使用者无法直接查看。
a) 使用视图获取口令状态
# 必须具备 DBA 权限
SELECT username,password FROM dba_users WHERE username = 'USERNAME';# 返回的是十六进制散列值,无法逆向为明文。
b) 使用 SQL*Plus 查询当前登录使用者信息
# 显示当前会话使用者名
SHOW USER;# 查看当前会话所使用的角色和权限
SELECT * FROM session_privs;
c) 重置口令的推荐方式
# ALTER USER 是标准语法 ALTER USER username IDENTIFIED BY NewStrongPassword!,# 若要强制要求下次登录修改口令 ALTER USER username PASSWORD EXPIRE;
4. Microsoft SQL Server
Pain Point:Lack of built‑in command to display password hashes;only admins can reset.
a) 查看登录名及其默认数据库
# 列出所有登录名
SELECT name,type_desc FROM sys.server_principals;
b) 重置登录名密码
# 使用 ALTER LOGIN ALTER LOGIN WITH PASSWORD = N'NewStrongPassword!' OLD_PASSWORD = N'OldPasswordIfKnown';
三、通用常用方法
-
最小权限原则:仅为执行特定任务授予必要权限。例如只允许
SYSTEM ADMINISTRATOR/ROOT/DBA. - MFA 与审计:AWS RDS、Azure DB 等云服务提供多因素认证和操作日志,请务必开启。
- Cron / 脚本管理:Sensitive commands 应放在受控脚本中,并使用环境变量而非硬编码明文。
- Password Policy:- 至少 12 位字符 - 包含大小写、数字与特殊符号 - 定期轮换 - 禁止复用历史 5 次密码。
- DLP 与加密传输:- 所有管理工具必须走 TLS/SSL - 不要把口令写入日志文件或监控网站。
- 备份前先脱敏:- 导出配置文件时用占位符替换真实口令。
四、借助可视化工具快速定位与管理账号
If you prefer GUI over CLI。following tools support safe password management:
- SaaS 网站如 AWS RDS Console、Azure Database for PostgreSQL,都内置“Reset Password”按钮,无需手动编写 SQL。 \end{ul}
五、结论与行动教程
在日常运维或开发过程中,很多 DBA 和开发者都会面临以下痛点:
- 不知道如何安全、合法地查询到数据库使用者的密码。
- 担心使用不当的查询语句导致密码泄露或程序安全风险。话说回来,
- 缺乏统一的操作手册。不同数据库之间查询方式差异大。
一、为何查询数据库密码本身就是风险?
数据库密码通常以哈希形式存储,直接明文查询几乎不可能。即使能够获取到哈希值,也必须在拥有足够权限且具备合法业务需求的前提下操作。随意使用 SELECT 语句读取使用者表,往往会导致:
- 敏感信息在日志中被记录。
- 权限过度暴露,引发审计合规问题。
- 误操作导致账号被锁或服务不可用。
二、不同数据库的密码查询与重置方法
1. MySQL / MariaDB
常见误区:直接 SELECT password FROM mysql.user; 读取明文密码,这在现代 MySQL 已经不可行且极不安全。
a) 使用程序视图查看授权信息
# 查看当前使用者拥有的权限
SHOW GRANTS FOR 'username'@'host';
b) 查询密码哈希
# 仅返回密码哈希值
SELECT user,auntication_string FROM mysql.user WHERE user='username';
c) 安全地重置密码
# 使用 ALTER USER 重置
ALTER USER 'username'@'host' IDENTIFIED BY 'NewStrongPassword!',# 或者使用 SET PASSWORD
SET PASSWORD FOR 'username'@'host' = PASSWORD;
2. PostgreSQL
痛点:不少人不知道 PostgreSQL 的认证信息保存在两个地方:pg_hba.conf 与程序表。
a) 查看认证方式
`pg_hba.conf` 文件定义了每个连接的认证方式。
# 常用方法
/etc/postgresql/12/main/pg_hba.conf
# 示例行
host all all 0.0.0.0/0 md5
b) 查询程序表中的加密口令
# pg_user 表不再存放口令。但可以确认是否需要口令
SELECT usename,usesysid FROM pg_user WHERE usename='username';# 若想检查加密方式,可查看 pg_authid
SELECT rolname。rolpassword FROM pg_authid WHERE rolname='username';
c) 安全地修改密码
# ALTER USER 是推荐方式
ALTER USER username WITH PASSWORD 'NewStrongPassword!
',# 对于 SCRAM‑SHA‑256 可额外指定加密方式
ALTER USER username WITH ENCRYPTED PASSWORD 'NewStrongPassword!',
3. Oracle Database
Pain Point:Oracle 将口令以散列形式保存在 dba_users/user$ 表中,普通使用者无法直接查看。
a) 使用视图获取口令状态
# 必须具备 DBA 权限
SELECT username,password FROM dba_users WHERE username = 'USERNAME';# 返回的是十六进制散列值,无法逆向为明文。
b) 使用 SQL*Plus 查询当前登录使用者信息
# 显示当前会话使用者名
SHOW USER;# 查看当前会话所使用的角色和权限
SELECT * FROM session_privs;
c) 重置口令的推荐方式
# ALTER USER 是标准语法 ALTER USER username IDENTIFIED BY NewStrongPassword!,# 若要强制要求下次登录修改口令 ALTER USER username PASSWORD EXPIRE;
4. Microsoft SQL Server
Pain Point:Lack of built‑in command to display password hashes;only admins can reset.
a) 查看登录名及其默认数据库
# 列出所有登录名
SELECT name,type_desc FROM sys.server_principals;
b) 重置登录名密码
# 使用 ALTER LOGIN ALTER LOGIN WITH PASSWORD = N'NewStrongPassword!' OLD_PASSWORD = N'OldPasswordIfKnown';
三、通用常用方法
-
最小权限原则:仅为执行特定任务授予必要权限。例如只允许
SYSTEM ADMINISTRATOR/ROOT/DBA. - MFA 与审计:AWS RDS、Azure DB 等云服务提供多因素认证和操作日志,请务必开启。
- Cron / 脚本管理:Sensitive commands 应放在受控脚本中,并使用环境变量而非硬编码明文。
- Password Policy:- 至少 12 位字符 - 包含大小写、数字与特殊符号 - 定期轮换 - 禁止复用历史 5 次密码。
- DLP 与加密传输:- 所有管理工具必须走 TLS/SSL - 不要把口令写入日志文件或监控网站。
- 备份前先脱敏:- 导出配置文件时用占位符替换真实口令。
四、借助可视化工具快速定位与管理账号
If you prefer GUI over CLI。following tools support safe password management:
- SaaS 网站如 AWS RDS Console、Azure Database for PostgreSQL,都内置“Reset Password”按钮,无需手动编写 SQL。 \end{ul}

