必须授予SELECT、INSERT、UPDATE、DELETE、CREATE、DROP、INDEX、ALTER八项权限,禁用GRANT、FILE等高危权限;须用SQL语句手动创建用户并精确指定主机和数据库名,执行FLUSH PRIVILEGES生效,且.env中DB_HOST与授权主机必须严格一致。

phpMyAdmin里创建Laravel专用数据库用户要设哪些权限?
只给SELECT、INSERT、UPDATE、DELETE、CREATE、DROP、INDEX、ALTER这8项,其他一律不勾。Laravel的迁移(php artisan migrate)需要CREATE和ALTER建表改结构,DROP用于migrate:refresh,INDEX是Schema::create()里加索引所必需的。别开GRANT、FILE、SHUTDOWN这类高危权限——哪怕只是开发环境,也别留后门。
用SQL语句手动创建比图形界面更可靠
phpMyAdmin的「用户账户」页点「添加用户」容易漏掉主机限制或误选全局权限。直接切到「SQL」页执行更可控:
CREATE USER 'laravel_app'@'localhost' IDENTIFIED BY 'strong_password_here'; GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON `myapp_db`.* TO 'laravel_app'@'localhost'; FLUSH PRIVILEGES;
注意三点:
• 'laravel_app'@'localhost' 中的localhost必须和你的PHP运行环境一致(如用Docker则可能是'%' 或具体容器IP)
• 数据库名myapp_db要替换成你实际用的库名,且末尾的.*不能省——否则权限不生效
• 执行完务必点「刷新」或运行FLUSH PRIVILEGES,否则新用户连不上
验证权限是否真生效:用mysql命令行快速测
别信phpMyAdmin右上角显示的“已登录”,它可能缓存了旧会话。在终端里直连验证最准:
立即学习“PHP免费学习笔记(深入)”;
Laravel Cloud(cloud.laravel.com)。此技能用于处理所有 Laravel Cloud 请求,包括搜索和读取数据。只要任务涉及 Laravel Cloud,即使用此技能。
mysql -u laravel_app -p -D myapp_db
然后试几条Laravel常用操作:
- 运行
SHOW TABLES;—— 应该能列出表 - 执行
CREATE TABLE test_perm (id INT);—— 应成功 - 执行
GRANT SELECT ON *.* TO 'laravel_app'@'localhost';—— 应报错#1045 - Access denied
如果第三条没报错,说明GRANT权限意外开了,立刻删掉重配。
.env里配置账号时最容易忽略的两个细节
Laravel的.env文件里写数据库配置,这两个地方常被跳过检查:
-
DB_HOST=127.0.0.1和DB_HOST=localhost在MySQL权限体系里是不同主机——前者走TCP/IP,后者走socket;如果你用户是'laravel_app'@'localhost',但.env写了127.0.0.1,就会连不上 -
DB_DATABASE值必须和授权时的库名完全一致,包括大小写(Linux服务器区分大小写)
权限配得再细,只要这两处对不上,php artisan tinker里DB::connection()->getPdo()就抛异常,而且错误信息里根本不会提权限问题,只会说“Access denied for user”。


















