连接字符串语法

适用于: .NET Framework .NET .NET Standard

下载 ADO.NET

Microsoft.Data.SqlClient 具有从 DbConnection 继承的 Connection 对象,以及特定于提供程序的 ConnectionString 属性。 SqlClient 提供程序的特定连接字符串语法记录在其 ConnectionString 属性中。 有关连接字符串语法的更多信息,请参见 ConnectionString

连接字符串生成器

Microsoft SqlClient Data Provider for SQL Server 引入了以下连接字符串生成器。

连接字符串生成器使你可以在运行时构造具有有效语法的连接字符串,从而不必在代码中手动串联连接字符串值。 有关详细信息,请参阅连接字符串生成器

Windows 身份验证

建议使用 Windows 身份验证(有时也称为“集成安全性”)连接到支持其的数据源。 下表显示了 Microsoft SqlClient Data Provider for SQL Server 使用的 Windows 身份验证语法。

提供程序 语法
SqlClient Integrated Security=true;

-- or --

Integrated Security=SSPI;

SqlClient 连接字符串

SqlConnection 连接字符串的语法记录在 SqlConnection.ConnectionString 属性中。 您可以使用 ConnectionString 属性来获取或设置 SQL Server 数据库的连接字符串。 连接字符串关键字还映射到 SqlConnectionStringBuilder 中的属性。

重要

Persist Security Info 关键字的默认设置为 false。 如果将其设置为 trueyes,则允许在打开连接后通过连接获取安全敏感信息(包括用户 ID 和密码)。 保持将 Persist Security Info 设置为 false,以确保不受信任的源不能访问敏感的连接字符串信息。

使用 SqlClient 进行 Windows 身份验证

下列各个语法形式都将使用 Windows 身份验证连接到本地服务器上的 AdventureWorks 数据库。

"Persist Security Info=False;Integrated Security=true;  
    Initial Catalog=AdventureWorks;Server=MSSQL1;Encrypt=True;"  
"Persist Security Info=False;Integrated Security=SSPI;  
    database=AdventureWorks;server=(local);Encrypt=True;"  
"Persist Security Info=False;Trusted_Connection=True;  
    database=AdventureWorks;server=(local);Encrypt=True;"  

使用 SqlClient 进行 SQL Server 身份验证

Windows 身份验证是用于连接到 SQL Server 的首选方法。 但是,如果需要 SQL Server 身份验证,请使用下列语法来指定用户名和密码。 在此示例中,星号用来表示有效用户名和密码。

"Persist Security Info=False;User ID=*****;Password=*****;Initial Catalog=AdventureWorks;Server=MySqlServer;Encrypt=True;"  

连接到 Azure SQL 数据库或 Azure Synapse Analytics 并提供格式为 user@servername 的用户名时,请确保用户名中的 servername 值与为 Server= 提供的值相匹配。

备注

Windows 身份验证优先于 SQL Server 登录。 如果您同时指定 Integrated Security=true 以及用户名和密码,将忽略用户名和密码,而使用 Windows 身份验证。

连接到 SQL Server 的命名实例

若要连接到 SQL Server 的命名实例,请使用“服务器名\实例名”语法。

"Data Source=MySqlServer\MSSQL1;"  

在生成连接字符串时,您还可以将 DataSourceSqlConnectionStringBuilder 属性设置为实例名。 DataSource 对象的 SqlConnection 属性是只读的。

Type system version 变更

SqlConnection.ConnectionString 中的 Type System Version 关键字指定 SQL Server 类型的客户端表示形式。 要详细了解 Type System Version 密钥,请参阅 SqlConnection.ConnectionString

连接并附加到 SQL Server Express 用户实例

用户实例是 SQL Server Express 中的一个功能。 它们允许以最低权限的本地 Windows 帐户运行的用户附加并运行 SQL Server 数据库,而无需具有管理权限。 使用用户 Windows 凭据执行用户实例,而不是作为服务执行用户实例。

有关使用用户实例的详细信息,请参阅 SQL Server Express 用户实例

使用 TrustServerCertificate

连接到 SQL Server 实例时,使用 TrustServerCertificate 关键字。 将 TrustServerCertificate 设置为 true 时,传输层使用 TLS/SSL 将通道加密,并跳过遍历证书链以验证信任的过程。

  • 在 Microsoft.Data.SqlClient 2.0 之前的版本中,将 Encrypt 设置为 False 且未验证服务器证书时,将忽略此设置。
  • 从 Microsoft.Data.SqlClient 版本 2.0 开始,即使将 Encrypt 设置为 False,设置也会控制在服务器强制加密时是否执行证书验证。
  • 从 Microsoft.Data.SqlClient 版本 5.0 开始,将 Encrypt 设置为 Strict 时,将忽略此设置。 服务器证书始终在 Strict 模式下进行验证。

有关详细信息,请参阅加密和证书验证

"TrustServerCertificate=true;"

HostNameInCertificate

从 Microsoft.Data.SqlClient 版本 5.0 开始,HostNameInCertificate 是一个新的连接选项。 服务器证书验证可确保证书中的公用名 (CN) 或使用者备用名称 (SAN) 与所连接的服务器名称一致。 在某些情况下(例如 DNS 别名),服务器名称可能与 CN 或 SAN 不匹配。 可使用 HostNameInCertificate 值在服务器证书中指定不同的预期 CN 或 SAN。

"HostNameInCertificate=myserver.example.com"

ServerCertificate

从 Microsoft.Data.SqlClient 版本 5.1 开始,ServerCertificate 是一个新的连接选项。 ServerCertificate 连接设置的默认值为空字符串。 当 Encrypt 设置为 MandatoryStrict 时,可以使用 ServerCertificate 在文件系统上指定证书文件的路径,以与服务器的 TLS 证书匹配。 要使证书有效,指定的证书必须完全匹配。 接受的证书格式为 PEM、DER 和 CER。 下面是一个示例:

"Data Source=...;Encrypt=Strict;ServerCertificate=C:\certificates\server.cer"

启用加密功能

若要在服务器上尚未预配证书时启用加密,必须将“信任服务器证书”连接属性设置为 True。 在这种情况下,加密将使用不带验证的自签名服务器证书,因为服务器上未预配可验证的证书。

应用程序设置无法降低在 SQL Server 中配置的安全级别,但可以增强安全级别。 应用程序可以通过将 TrustServerCertificateEncrypt 关键字设置为 true 来请求加密,以保证在未预配服务器证书的情况下仍能够进行加密。 但是,如果未在客户端配置中启用 TrustServerCertificate,则仍需要提供服务器证书。

下表描述了各种情况。

加密连接字符串/属性 “信任服务器证书”连接字符串/特性 结果
否/可选 忽略 无加密。
是/必需 仅当存在可验证的服务器证书时才加密,否则连接尝试将失败。
是/必需 始终加密,但可能使用自签名的服务器证书。
严格1 忽略 始终进行加密并且必须使用可验证的服务器证书,否则连接尝试将失败。

1 严格加密仅从 Microsoft.Data.SqlClient 5.0 版本开始可用。

有关详细信息(包括以前版本中的行为),请参阅加密和证书验证

另请参阅

连接字符串
加密和证书验证
连接到数据源
用于 SQL Server 的 Microsoft ADO.NET