我有一个 microsoft access 前端连接到后端的 SQL 数据库。 过去 4 年我一直在使用此设置,最近遇到了新同事无法使用该工具的问题,因为我们公司从内部系统中淘汰了 ODBC 驱动程序 17。 我不明白 ODBC 驱动程序 17 和 18 之间有什么区别会导致版本 18 失败。
驱动程序使用方法: 在 ODBC 数据源管理器中,创建了指向我们数据库的手动链接。 同事为链接“Our_link”输入特定名称,并在驱动程序名称中注明“ODBC Driver 17 for SQL Server”
然后在我们的访问前端内部,我们链接到该驱动程序,如下所示:
Const ConStrSQL As String = "DRIVER={ODBC Driver 17 for SQLServer};Server=OurServer;Database=Our_DB;UID=User();Trusted_Connection=Yes;"
我遇到的问题是,当我尝试使用 ODBC 驱动程序 18 在数据源管理器中创建 ODBC 连接时,我收到一条错误消息:
[![`"Connection Failed: The certificate chain was issued by an authority that is not trusted"`]
不确定这些额外信息是否有帮助,但我也看到以下内容:
SQLState: 08001
SQL Server Error -2146893019
Client unable to establish connection
我是否需要联系我们的数据库管理组并询问他们是否在服务器端安装了驱动程序 18?
更简单的解决方案是将
;TrustServerCertificate=Yes
添加到连接字符串
我猜测这与版本 18 的加密行为的更改有关,特别是默认情况下需要加密。建议的修复方法是在您的服务器上安装受信任的证书[1],但如果您不想与数据库管理员打交道,您仍然可以通过在连接中为 Encrypt 指定否(或可选)来进行连接字符串。[2]
服务器设置为强制加密有可能不起作用,但听起来更改全部在客户端。理想情况下,您希望加密始终有效,因此,如果您使用自签名证书,请将 SQL Server 中的公钥添加到客户端计算机上的受信任证书中。
[1]:https://techcommunity.microsoft.com/t5/sql-server-blog/odbc-driver-18-0-for-sql-server-released/ba-p/3169228) [2]: https://learn.microsoft.com/en-us/sql/connect/odbc/dsn-connection-string-attribute?view=sql-server-ver16#encrypt
我之前用的是17号驱动。我刚刚将 (17) 更改为 18 并添加 Encrypt=yes;TrustServerCertificate=Yes;到连接字符串,它工作得很好。希望这对某人有帮助。