MySQL / MariaDB 数据库
在 MySQL 及其分支 MariaDB 中,用户信息被存储在系统数据库 mysql 的 user 表中,查看用户最直接的方法就是查询这张表。

核心查询:
SELECT User, Host, authentication_string FROM mysql.user;
User: 用户名。Host: 该用户可以从哪个主机连接到数据库服务器。 表示可以从任意主机连接。: 存储加密后的密码(在旧版本中字段名为 Password)。
为了简化,通常只查看用户名和主机:
SELECT User, Host FROM mysql.user;
也可以使用 SHOW GRANTS 语句来查看特定用户的权限,这同样会显示用户名和主机信息。
SHOW GRANTS FOR 'root'@'localhost';
PostgreSQL 数据库
PostgreSQL 提供了便捷的元命令来查看用户(在 PostgreSQL 中通常称为“角色”),如果你使用的是 psql 命令行工具,操作非常简单。
核心命令(在 psql 中):
du
这个命令会列出所有角色(用户)及其属性,例如是否为超级管理员、是否能创建数据库等。
如果你希望通过 SQL 查询来实现,可以查询系统目录 pg_user 或 pg_roles。

SELECT usename FROM pg_user;
pg_user 是一个视图,它提供了关于用户角色的简化信息。
SQL Server 数据库
在 Microsoft SQL Server 中,登录名(服务器级别的用户)信息存储在系统视图 sys.server_principals 中。
核心查询:
SELECT name, type_desc, create_date FROM sys.server_principals WHERE type = 'S';
name: 登录名。: 主体类型描述, 'SQL_LOGIN'表示 SQL Server 认证登录,'WINDOWS_LOGIN'表示 Windows 认证登录。type = 'S': 这个过滤条件用于筛选出 SQL 登录名。
若要查看特定数据库中的用户,可以查询 sys.database_principals。
USE YourDatabaseName;
SELECT name, type_desc FROM sys.database_principals WHERE type IN ('S', 'U'); Oracle 数据库
Oracle 数据库将用户信息存储在数据字典视图中,根据你的权限,可以查询不同的视图。
核心查询(需要 DBA 权限):
SELECT username, account_status, created FROM dba_users;
username: 用户名。: 账户状态(如 OPEN,EXPIRED,LOCKED)。created: 用户创建日期。
如果你没有 DBA 权限,可以查询 ALL_USERS 视图,它会列出你能看到的所有用户(但不包括账户状态等敏感信息)。

SELECT username FROM all_users;
或者查询 USER_USERS 视图,它只显示当前用户的信息。
不同数据库查看用户方法汇总
为了方便对比,下表小编总结了上述四种数据库查看用户的主要方法:
| 数据库类型 | 主要方法/命令 | 说明 |
|---|---|---|
| MySQL / MariaDB | SELECT User, Host FROM mysql.user; | 直接查询系统表 mysql.user,信息最全面。 |
| PostgreSQL | du (在 psql 中) | 最便捷的命令行工具,显示角色和属性。 |
SELECT usename FROM pg_user; | 标准 SQL 查询方式,适用于任何 SQL 客户端。 | |
| SQL Server | SELECT name FROM sys.server_principals; | 查询系统视图,区分服务器登录名和数据库用户。 |
| Oracle | SELECT username FROM dba_users; | 查询数据字典视图,需要相应权限(如 DBA)。 |
重要注意事项与最佳实践
- 权限是关键:执行上述查询,尤其是查看所有用户信息的操作,通常需要管理员权限,普通用户可能只能看到自己的信息或收到权限不足的错误。
- 用户与角色:现代数据库系统普遍采用“角色”的概念,用户可以被赋予一个或多个角色,而权限则直接赋予角色,管理用户权限时,更多地是在管理角色成员关系。
- 主机与安全:在 MySQL 中,
User@Host的组合定义了唯一身份,合理限制Host字段是防止未授权访问的重要安全措施。
相关问答 (FAQs)
问题1:为什么我在 MySQL 中执行 SELECT User FROM mysql.user; 后,看不到任何结果,或者提示表不存在?
解答: 这通常由两个原因造成,你可能没有连接到 MySQL 服务器,或者连接了但操作的不是 MySQL 服务,也是最常见的,你当前登录的用户没有查询 mysql.user 表的权限,默认情况下,只有 root 用户或具有 SELECT 权限于 mysql 数据库的用户才能执行此查询,请使用管理员账户登录后再试。
问题2:查看用户列表和查看用户权限有什么区别?
解答: 这是一个很重要的区别,查看用户列表(如 SELECT User FROM...)只是获取了数据库中存在的“身份”信息,告诉你“谁”可以尝试连接,而查看用户权限(如 MySQL 的 SHOW GRANTS FOR 'user'@'host'; 或 Oracle 的查询 DBA_TAB_PRIVS)则是深入了解这个“身份”在被允许连接后“能做什么”,例如它能否查询某个表、能否创建新数据库、能否修改其他用户的数据等,前者是身份认证,后者是授权管理,两者共同构成了数据库安全的核心。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复