共用方式為


使用 SQL 配接器保護程序設計

如何在使用 Visual Studio 插ty「Add Adapter Service Reference」時保護認證?

當您使用新增配接器服務參考外掛程式來建立 WCF 用戶端時,您可能必須提供 SQL Server 資料庫的使用者名稱和密碼。 您必須從 [設定配接] 對話框的 [安全性] 索引標籤輸入認證。 SQL 配接器不提供選項來指定使用者名稱和密碼做為連線 URI 的一部分。 這可確保下列各項:

  • 認證將不會顯示在 [新增配接器服務參考外掛程式] 對話方塊的 [設定 URI] 欄位中,任何有權存取電腦畫面的人都可以讀取認證。

  • 認證不會出現在新增配接器服務參考外掛程式產生的組態檔中。

    如需如何使用新增配接器服務參考外掛程式來產生 WCF 用戶端的詳細資訊,包括如何輸入 SQL Server 資料庫的使用者名稱和密碼,請參閱使用 SQL 配接器 取得 Visual Studio 中 SQL Server 作業的元數據

在程式代碼中設定認證的最佳作法為何?

WCF 提供 ClientCredentials 類別,協助您設定用戶端通訊物件,例如 ChannelFactory 用來向服務驗證本身的認證。 藉由使用 ClientCredentials 類別,您可確保 WCF 會採用該物件通道堆疊中指定的任何驗證機制,並將其套用至用戶端與服務之間的交換。

因為 SQL 配接器是使用其取用的應用程式裝載於同進程,所以使用 ClientCredentials 類別在取用應用程式所使用的用戶端通訊物件上設定認證並不必要。 然而,認為這樣做是很好的做法。

SQL 配接器需要使用 ClientCredentials 類別,以程式設計方式傳遞認證。 SQL 配接器會忽略 AcceptCredentialsInUri 系結屬性,以防止在 URI 中傳遞認證。

下列範例示範如何使用 Credentials 屬性,在 ChannelFactory 上設定 SQL Server 資料庫的認證。

// Create binding and endpoint  
SqlAdapterBinding binding = new SqlAdapterBinding();  
EndpointAddress address = new EndpointAddress("mssql://mysqlserver//mydatabase?");  
  
// Create the channel factory   
ChannelFactory<IRequestChannel> factory = new ChannelFactory<IRequestChannel>(binding, endpointAddress))  
  
// Set user name and password  
factory.Credentials.UserName.UserName = "myuser";  
factory.Credentials.UserName.Password = "mypassword";  
  
// Open the channel factory  
factory.Open();  

下列範例示範如何使用 ClientCredentials 類別,在 WCF 用戶端上設定 SQL Server 資料庫的認證。

// Initialize a new client for the SELECT operation on the Employee table   
SqlAdapterBinding binding = new SqlAdapterBinding();  
EndpointAddress address = new EndpointAddress("mssql://mysqlserver//mydatabase?");  
TableOp_dbo_EmployeeClient client = new TableOp_dbo_EmployeeClient(binding,address);  
  
// Set user name and password  
client.ClientCredentials.UserName.UserName = "myuser";  
client.ClientCredentials.UserName.Password = "mypassword";  
  
// Open the client  
client.Open();  

如何跨進程界限提供更安全的數據交換?

SQL 配接器會與用於取用它的應用程式或服務在同一進程中裝載。 由於配接器是與取用者同進程裝載,因此不需要在取用者與 SQL 配接器之間交換的訊息上提供安全性。 不過,如果取用的應用程式或服務將包含敏感性資料庫資訊的訊息跨進程界限傳送給另一個服務或用戶端,您應該採取措施,為環境中的此數據提供適當的保護。 Windows Communication Foundation (WCF) 提供許多選項,可協助保護用戶端與服務之間傳送的訊息。 如需協助保護 WCF 中用戶端與服務之間傳送之訊息的詳細資訊,請參閱 保護服務和用戶端。 如需 WCF 提供之安全性功能的詳細資訊,請參閱 Windows Communication Foundation Security

另請參閱

保護您的 SQL 應用程式
保護 SQL 配接器的最佳做法