我一直在网上搜索并没有取得任何成功。
例如:https://laravel.io/forum/06-18-2014-connecting-mysql-over-ssl?page=1 https://laracasts.com/discuss/channels/lumen/connecting-to-mysql-via-ssl-from-lumen
我正在尝试从我的laravel应用程序通过ssl连接到azure mysql数据库。
如果我关闭了ssl,我已经确认可以连接到数据库。所以设置是正确的。让我兴奋的是,我找不到的文件是如何通过ssl连接。我有一个sslkey - 我已经确认可以使用我的一个数据库管理程序连接到数据库 - 所以这些部分就在那里。
然而,Laravel似乎失败了。这是我的数据库驱动程序:
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'localhost'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
'engine' => null,
'sslmode' => env('DB_SSLMODE', 'prefer'),
'options' => array(
PDO::MYSQL_ATTR_SSL_KEY => '\ssl\DatabaseCACert.pem'),
],
我错过了什么?数据库目前只是拒绝连接。 SQLSTATE[HY000] [2002]
所以它很接近。
答案 0 :(得分:1)
您需要提供文件的完整路径。如果它们在您的laravel应用程序文件夹中,那么您可以使用base_path
方法生成完整的poth。您可能还需要定义cert和ca。
'options' => [
PDO::MYSQL_ATTR_SSL_KEY => base_path('ssl/client-key.pem'),
PDO::MYSQL_ATTR_SSL_CERT => base_path('ssl/client-cert.pem'),
PDO::MYSQL_ATTR_SSL_CA => base_path('ssl/ca-cert.pem')
]
答案 1 :(得分:0)
确定。解决了这个问题。与microsoft一起打电话,注意到其中一个日志错误是:
PDO::__construct(): Peer certificate CN=`resourceregion-a.control.database.windows.net' did not match expected CN=`db.mysql.database.azure.com'
在@alexejenko指出的文档中的那一行,在那之后的位:
"如果您需要使用" - ssl-mode = VERIFY_IDENTITY",那么您可以ping您的服务器名称以解析区域服务器名称,例如westeurope1-a.control.database.windows.net,并使用解决此问题之前连接中的区域服务器名称。我们计划在将来取消此限制。"
原来这就是发生的事情。数据库连接路由到区域数据库,而不是我的。所以对于不完整的产品而言。
将DB_HOST更改为该区域后,它已成功连接(请注意:请确保已将您的ips列入白名单)。
答案 2 :(得分:0)
有时,当您没有远程访问数据库的权限时,也会显示相同的错误。
此处的示例:
因此,您可以尝试从Server1-app:
$ mysql -u youruser -h yourpassword;
并进入mysql终端,检查您是否能够访问数据库:
$ show databases;
如果显示了数据库,则您具有特权,并且一切正常,如果没有,则必须访问Server2-数据库并向用户授予特权。
一次进入Server2-数据库;
$ mysql -u root -p
$ GRANT ALL PRIVILEGES ON your_database.* TO 'youruser'@'123.123.123.12';
$ FLUSH PRIVILEGES;
$ exit;
希望会有所帮助;