Laravel部署到Azure后连接MySQL时用户名自动追加IP问题求助
解决方案
核心思路
通过PDO初始化命令强制指定MySQL登录用户的完整格式,覆盖Laravel/PDO自动追加IP的行为。
具体步骤
修改config/database.php中的MySQL配置,在options数组中添加PDO::MYSQL_ATTR_INIT_COMMAND,执行SET USER语句指定你需要的用户名格式:
'mysql' => [ 'driver' => 'mysql', 'url' => env('DATABASE_URL'), 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), 'unix_socket' => env('DB_SOCKET', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'prefix_indexes' => true, 'strict' => false, 'engine' => null, 'options' => extension_loaded('pdo_mysql') ? array_filter([ PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA', false), // 添加以下初始化命令,替换为你的目标用户名格式 PDO::MYSQL_ATTR_INIT_COMMAND => "SET USER = 'acc_statement@mysite';", ]) : [], ],
原理说明
当Laravel通过PDO连接Azure MySQL时,驱动会自动将用户名追加客户端IP后缀。通过MYSQL_ATTR_INIT_COMMAND,我们在连接建立后立即执行SET USER语句,强制切换到你需要的带域名后缀的用户身份,绕过驱动的自动修改逻辑。
额外检查
- 确认Azure MySQL中已创建
acc_statement@mysite账户,并授予对应数据库的访问权限 - 确保该账户的授权规则允许从Azure应用服务的IP范围访问(或临时设置为
%测试)
内容的提问来源于stack exchange,提问作者Aaron
相关产品推荐
相关产品推荐

