2017-04-12 31 views
1

我得到了一個運行php 5.5.9,laraverl 5.2的ubuntu docker容器,它可以成功連接到SQL Server並返回結果。Laravel與ENCRYPT的SQL Server連接= yes trustServerCertificate = true

我使用的碼頭工人形象https://hub.docker.com/r/h2labs/laravel-mssql/

我的問題是,該服務器使用加密和我找不到如何把下面的參數傳遞給laravel連接字符串爲MSSQL

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]

+0

你有沒有試過他們到你的'.env'文件 –

回答

0

不支持任一選項until Laravel 5.4;具體來說,v5.4.11

所以你首先需要升級到laravel /框架:> = 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連接。

+0

不知道這是對的。 Laravel 5.4將需要PHP版本> 5.5.9,這意味着某些軟件包在我工作的映像上無效。你能否通過工作設置提供指向圖像的鏈接? –

+0

哪些軟件包有問題? PHP 5.5在[2016年7月21日](https://en.wikipedia.org/wiki/PHP#Release_history)上達到了生命的盡頭,因此可能更容易解決這些軟件包。 –