thinkphp 3.2.8 无内置“执行sql文件删除权限”命令,实际是人工导入含delete/drop语句的sql文件来清空auth_rule等表数据;必须先备份、按条件删除、清理缓存并避免直接用db::execute()执行多语句sql文件。

ThinkPHP 3.2.8 本身不提供“执行 SQL 文件”或“删除权限”的内置命令,所谓“执行 SQL 文件删除权限”,实际是指:通过导入一个含 DROP、DELETE FROM auth_rule 或 REVOKE 等语句的 SQL 文件,来批量清除权限数据。但需注意——这不是框架功能,而是数据库操作,必须人工审慎执行。
一、明确权限数据存在哪张表
ThinkPHP 3.2 的权限系统(如基于 Auth 类或第三方扩展如 thinkAuthorization)通常将权限规则存于 auth_rule 表中,字段包括 id、name(规则名,如 Admin/Article/delete)、condition 等。用户-角色-权限关系则分散在 auth_group_access、auth_group、auth_rule 等表。
执行前务必确认:
- 你的项目用的是原生 ThinkPHP Auth 还是 thinkAuthorization 等扩展?查看数据库表结构或初始化 SQL(如
src/thinkAuthorization.sql) - 权限是否还关联了菜单、节点、按钮等业务表(如
menu、node),删auth_rule不等于清空全部权限界面
二、安全删除权限的正确方式
不建议直接执行未审核的 SQL 文件,尤其含 DROP TABLE 或 TRUNCATE。推荐分步、可逆、带条件的操作:
-
只清空规则,保留表结构:用
DELETE FROM auth_rule WHERE status = 1(若含 status 字段),或按模块前缀清理,例如:DELETE FROM auth_rule WHERE name LIKE 'Admin/%'; -
连带清理关联关系:再执行
DELETE FROM auth_group_access WHERE rule_id NOT IN (SELECT id FROM auth_rule); -
备份优先:执行前导出当前权限表:
mysqldump -u user -p your_db auth_rule auth_group auth_group_access > auth_backup_$(date +%F).sql
三、如何“执行 SQL 文件”
ThinkPHP 3.2.8 没有 Db::executeFile() 方法。必须借助外部工具或手动加载:
-
命令行导入(推荐):
mysql -u root -p your_db -
PHP 脚本逐行执行(仅限开发环境):
读取 SQL 文件 → 按分号拆分语句 → 用MysqlModel或原生mysqli::multi_query()执行(注意:TP3.2 的Mysql.class.php不支持多语句,需自行封装) -
禁止在控制器里
file_get_contents + Db::execute():SQL 文件若含 DDL(如CREATE VIEW)或多个语句,Db::execute()会静默失败或只执行第一条
四、执行后必须做的收尾动作
权限数据变更后,框架缓存(尤其是运行时缓存)可能仍保留旧规则,导致权限校验失效或误判:
- 清空
Runtime/Cache/和Runtime/Data/目录(特别是Auth相关缓存文件) - 若使用 Redis 缓存权限集合,需手动删 key,如
DEL auth_rules_all、DEL user_permissions_123 - 重启 PHP-FPM 或 Web 服务器(部分配置缓存需重载)
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











