Laravel SQL Server与ENCRYPT的连接=是trustServerCertificate = true

时间:2017-04-12 02:03:39

标签: sql sql-server laravel

我有一个运行php 5.5.9的ubuntu docker容器,laraverl 5.2可以成功连接到SQL Server并获得结果。

我使用的泊坞窗图片是https://hub.docker.com/r/h2labs/laravel-mssql/

我得到的问题是服务器使用加密,我无法找到如何将以下参数传递给mssql的laravel连接字符串

ENCRYPT=yes;trustServerCertificate=true

目前我的SQL Server连接字符串如下所示

DB_CONNECTION=sqlsrv
DB_HOST=sql.mydomain.com
DB_PORT=1433
DB_DATABASE=mydbname
DB_USERNAME=mysusername
DB_PASSWORD=mypass

我的laravel数据库配置看起来像这样

        'sqlsrv' => [
        'driver' => 'sqlsrv',
        'host' => env('DB_HOST', 'localhost'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
        'charset' => 'utf8',
        'prefix' => '',
    ],

SQL Server错误日志条目是

  

连接到此服务器需要加密,但客户端库不支持加密;连接已关闭。请升级您的客户端库。 [客户:103.31.114.56]

1 个答案:

答案 0 :(得分:0)

未引入对任一选项的支持until Laravel 5.4;具体而言,v5.4.11

所以你首先需要升级到laravel / framework:> = 5.4.11,< 5.5

然后,要配置您的应用程序,您需要修改config / database.php文件,如下所示:

// ...
'sqlsrv' => [
    'driver' => 'sqlsrv',
    'host' => env('DB_HOST', 'localhost'),
    'database' => env('DB_DATABASE', 'forge'),
    'username' => env('DB_USERNAME', 'forge'),
    'password' => env('DB_PASSWORD', ''),
    'charset' => 'utf8',
    'prefix' => '',
    'encrypt' => 'yes', // alternatively, defer to an env variable
    'trust_server_certificate' => 'true', // alternatively, defer to an env variable
],
// ...

DatabaseServiceProvider,通过ConnectionFactory和SqlServerConnector将使用它来构建DSN中设置的那些选项的基础PDO连接。