連接字串語法
適用於:.NET Framework .NET .NET Standard
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 驗證語法。
提供者 | Syntax |
---|---|
SqlClient |
Integrated Security=true; -- or -- Integrated Security=SSPI; |
SqlClient 連接字串
SqlConnection 連接字串的語法列於 SqlConnection.ConnectionString 屬性中。 您可以使用 ConnectionString 屬性來取得或設定 SQL Server 資料庫的連接字串。 連接字串關鍵字也會對應至 SqlConnectionStringBuilder 中的屬性。
重要
Persist Security Info
關鍵字的預設設定為 false
。 如果將其設為 true
或 yes
,則在開啟連接後,可透過連接獲得機密資訊,包含使用者 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 驗證
連接至 SQL Server 時慣用「Windows 驗證」。 不過,如果需要「SQL Server 驗證」,請使用下列語法來指定使用者名稱和密碼。 在這個範例中使用了星號來表示有效的使用者名稱和密碼。
"Persist Security Info=False;User ID=*****;Password=*****;Initial Catalog=AdventureWorks;Server=MySqlServer;Encrypt=True;"
當您連線到 Azure SQL Database 或 Azure Synapse Analytics,並以 user@servername
格式提供使用者名稱時,請確定使用者名稱中的 servername
值符合為 Server=
提供的值。
注意
Windows 驗證的優先順序高於 SQL Server 登入。 如果您同時指定 Integrated Security=true 以及使用者名稱和密碼,系統就會忽略使用者名稱和密碼,而使用 Windows 驗證。
連線到 SQL Server 的具名執行個體
若要連線到 SQL Server 的具名執行個體,請使用「伺服器名稱\執行個體名稱」語法。
"Data Source=MySqlServer\MSSQL1;"
您也可以在建立連接字串時,將 DataSource 的 SqlConnectionStringBuilder
屬性設定為執行個體名稱。 DataSource 物件的 SqlConnection 屬性是唯讀的。
型別系統版本變更
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
設為 Mandatory
或 Strict
時,ServerCertificate
可用來指定檔案系統上與伺服器 TLS 憑證相符的憑證檔案路徑。 憑證若要有效,指定的憑證必須完全一致。 接受的憑證格式為 PEM、DER 和 CER。 以下是範例:
"Data Source=...;Encrypt=Strict;ServerCertificate=C:\certificates\server.cer"
啟用加密
若要在伺服器上尚未佈建憑證的情況下啟用加密,[信任伺服器憑證] 連線屬性必須設為 True
。 在此情況下,由於伺服器上尚未佈建任何可驗憑證,因此加密會使用自我簽署的伺服器憑證,而不需要驗證。
應用程式設定無法降低 SQL Server 中設定的安全性層級,但可以選擇性地進行加強。 應用程式可以要求加密,方式是將 TrustServerCertificate
和 Encrypt
關鍵字設定為 true
,並保證即使在尚未佈建伺服器憑證的情況下,仍會進行加密。 不過,如果用戶端組態中未啟用 TrustServerCertificate
,則仍需要佈建的伺服器憑證。
下表說明所有案例。
加密連接字串/屬性 | 信任伺服器憑證連接字串/屬性 | 結果 |
---|---|---|
否/選用項 | 忽略 | 不發生任何加密。 |
是/強制 | No | 只有當存在可驗伺服器憑證時才會進行加密,否則連線嘗試會失敗。 |
是/強制 | 是 | 加密一定會發生,但是可能會使用自行簽署的伺服器憑證。 |
嚴格1 | 忽略 | 一律會進行加密,且必須使用可驗伺服器憑證,否則連線嘗試會失敗。 |
1 從 Microsoft.Data.SqlClient 5.0 版開始,才能使用嚴格加密。
如需詳細資訊,包括舊版本的行為,請參閱加密和憑證驗證。