【问题标题】:Laravel SQL Server connection with ENCRYPT=yes trustServerCertificate=trueLaravel SQL Server 连接 ENCRYPT=yes trustServerCertificate=true
【发布时间】:2017-09-07 14:42:34
【问题描述】:

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

我使用的docker镜像是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]

【问题讨论】:

  • 你有没有试过把它们放到你的.env文件中

标签: sql sql-server laravel


【解决方案1】:

没有引入对任一选项的支持until Laravel 5.4;具体来说,v5.4.11

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

然后,要配置您的应用程序,您需要修改 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 连接。

【讨论】:

  • 不确定这是否正确。 Laravel 5.4 需要 php 版本 > 5.5.9,这意味着某些包将无法在我处理的图像上使用。您能否提供一个指向具有工作设置的图像的链接>
  • 哪些包有问题? PHP 5.5 已在 21 July 2016 结束生命周期,因此解决这些包可能更容易。
猜你喜欢
  • 2020-10-04
  • 2014-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-28
相关资源
最近更新 更多