最近为公司开发了一套供内部使用的扫码系统,对接了多个平台,需要连接 SQL Server 数据库,软件和扩展的安装不复杂,但是有些小坑,将安装过程在此记录一下。
安装 Microsoft ODBC Driver for SQL Server
参考文档:安装 Microsoft ODBC Driver for SQL Server (Linux)
目前建议安装 Microsoft ODBC 17,18 会出现 ssl 相关的错误,暂时还不知道如何解决。
sudo su
curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
curl https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/prod.list > /etc/apt/sources.list.d/mssql-release.list
exit
sudo apt-get update
sudo ACCEPT_EULA=Y apt-get install -y msodbcsql17
sudo ACCEPT_EULA=Y apt-get install -y mssql-tools
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc
# 使用 PHP-FPM 一定要安装
sudo apt-get install -y unixodbc-dev
使用 PHP-FPM 一定要安装 unixodbc-dev
,若未安装,可能会报以下错误。
fatal error: sql.h: No such file or directory_taoing
安装 PHP 扩展
参考文档:在 Linux 和 macOS 上安装 Drivers for PHP
多版本 PHP 共存的情况下使用以下命令安装:
sudo pecl -d php_suffix=8.0 install sqlsrv
sudo pecl uninstall -r sqlsrv
sudo pecl -d php_suffix=8.0 install pdo_sqlsrv
sudo pecl uninstall -r pdo_sqlsrv
只有一个默认版本的情况使用以下命令安装:
sudo pecl install sqlsrv
sudo pecl install pdo_sqlsrv
启用扩展
sudo su
printf "; priority=20\nextension=sqlsrv.so\n" > /etc/php/8.0/mods-available/sqlsrv.ini
printf "; priority=30\nextension=pdo_sqlsrv.so\n" > /etc/php/8.0/mods-available/pdo_sqlsrv.ini
exit
sudo phpenmod -v 8.0 sqlsrv pdo_sqlsrv
报错
报以下错误,应该是新系统升级了 openssl 的版本,提高了最低安全协议的版本,低版本的 ssl 不再被支持。
SQLSTATE[08001]: [Microsoft][ODBC Driver 17 for SQL Server]SSL Provider: [error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol]
解决方案
修改配置文件 /etc/ssl/openssl.cnf
在文件靠前的位置添加以下内容
openssl_conf = default_conf
[default_conf]
ssl_conf = ssl_sect
[ssl_sect]
system_default = system_default_sect
[system_default_sect]
MinProtocol = TLSv1
CipherString = DEFAULT@SECLEVEL=1
版权声明
作者:不二
来源:不二博客
文章版权归作者所有,未经允许请勿转载。