使用“添加适配器服务引用”Visual Studio 插件时如何保护凭据?
使用“添加适配器服务引用插件”创建 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。