ThinkPHP 8.6 不提供查看数据库角色的内置命令,需根据数据库类型执行对应SQL查询;业务角色则通过查询 auth_role 等数据表实现。

ThinkPHP 8.6 本身不提供直接“查看数据库角色”的内置命令或方法,因为角色(Role)是数据库层面的概念,不是 ThinkPHP 框架的功能范畴。是否支持角色、如何查看,完全取决于你使用的数据库类型(如 MySQL 8.0+、PostgreSQL、SQL Server 等)及其配置。
确认数据库类型和版本
先明确你连接的是哪种数据库:
- MySQL :不支持角色(Role),只有用户(User)和权限(Privilege),此时“角色”概念不存在;
- MySQL 8.0+:原生支持角色,可通过 SQL 查询;
-
PostgreSQL:用
SELECT * FROM pg_roles;查角色; -
SQL Server:查
sys.database_principals或sys.server_principals。
在 ThinkPHP 8.6 中执行 SQL 查 MySQL 8.0+ 角色
如果你用的是 MySQL 8.0+,可在 TP8.6 中通过原生查询获取角色列表:
// 方式一:使用 Db 类(推荐)
use think\facade\Db;
$roles = Db::query("SELECT role FROM mysql.role_edges UNION SELECT user FROM mysql.user WHERE is_role='Y'");
<p>// 方式二:使用原生 PDO(更底层,需注意权限)
$pdo = Db::getPdo();
$stmt = $pdo->query("SELECT DISTINCT Role FROM mysql.role_edges");
$roles = $stmt->fetchAll(PDO::FETCH_COLUMN);
注意:执行这类系统表查询需要数据库账户具备 SELECT 权限在 mysql 库,普通应用账号通常无此权限——建议用管理员账号(如 root)连接专用调试连接,切勿在生产环境用高权限账号运行 Web 请求。
修复 Core bailout 状态损坏安全问题,以及 BZ2、DOM、PDO、Opcache/JIT 内存与执行错误,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
立即学习“PHP免费学习笔记(深入)”;
通过 SQL 文件导入后验证角色是否存在
若你执行了一个含 CREATE ROLE 或 GRANT ... TO role_name 的 SQL 文件,验证是否生效,可:
- 登录 MySQL 命令行,执行:
SELECT * FROM mysql.role_edges; - 或检查某用户被赋予的角色:
SHOW GRANTS FOR 'username'@'%'; - TP8.6 中不自动同步/暴露这些元数据,框架只负责执行语句,不解析或缓存角色状态。
ThinkPHP 层面的“角色”通常是业务模型
多数 ThinkPHP 项目中的“角色”指自定义的业务逻辑,比如:
- 数据表
auth_role存储角色名称与标识; - 中间表
auth_role_user绑定用户与角色; - 权限控制用
think-auth或自研策略(如你知识库中提到的GodPolicy)。
这种情况下,“查看角色”就是查业务表:RoleModel::select(); 或 Db::name('auth_role')->select(); —— 这才是 TP8.6 实际能操作和返回的内容。


















