使用 Oracle 数据库适配器进行安全编程
使用添加适配器服务引用 Visual Studio 插件时如何保护凭据?
使用“添加适配器服务引用”插件创建 WCF 客户端时,必须提供 Oracle 数据库的用户名和密码。 应仅从“配置适配器”对话框上的“安全性”选项卡执行此操作。 通过从“ 安全性 ”选项卡输入 Oracle 凭据,而不是直接输入 “配置 URI ”字段,可以确保以下各项:
凭据不会显示在“添加适配器服务引用插件”对话框的 “URI ”字段中,可访问计算机屏幕的任何人都可以读取这些凭据。
凭据不会显示在添加适配器服务引用插件生成的配置文件中。
有关如何使用添加适配器服务引用插件生成 WCF 客户端的详细信息,包括如何输入 Oracle 数据库的用户名和密码,请参阅 在 Visual Studio 中获取 Oracle 数据库操作的元数据。
在代码中设置凭据的最佳做法是什么?
WCF 提供 ClientCredentials 类,以帮助配置客户端通信对象(如 ChannelFactory)用于向服务进行身份验证的凭据。 通过使用 ClientCredentials 类,可确保 WCF 采用该对象的通道堆栈中指定的任何身份验证机制,并将其应用于客户端与服务之间的交换。
由于 Oracle 数据库适配器与正在使用的应用程序一起托管在进程内,因此不必使用 ClientCredentials 类在使用方应用程序使用的客户端通信对象上设置凭据。 然而,这样做被认为是很好的做法。
Oracle 数据库适配器鼓励使用 ClientCredentials 类。 此属性指定适配器是否接受连接 URI 中 Oracle 数据库的用户名和密码。 AcceptCredentialsInUri 默认为 false,这意味着,如果连接 URI 包含凭据,适配器将引发异常。 可以将 AcceptCredentialsInUri 设置为 true ,以在连接 URI 中提供凭据。
以下示例演示如何使用 Credentials 属性在 ChannelFactory 上设置 Oracle 数据库的凭据。
// Create binding and endpoint
OracleDBBinding binding = new OracleDBBinding();
EndpointAddress endpointAddress = new EndpointAddress("oracleDB://Adapter");
// Create the channel factory
ChannelFactory<IRequestChannel> factory = new ChannelFactory<IRequestChannel>(binding, endpointAddress))
// Set user name and password
factory.Credentials.UserName.UserName = "SCOTT";
factory.Credentials.UserName.Password = "TIGER";
// Open the channel factory
factory.Open();
以下示例演示如何使用 ClientCredentials 类在 WCF 客户端上设置 Oracle 数据库的凭据。
// Initialize a new client for the SQLEXECUTE operation from configuration
SQLEXECUTEClient sqlExecuteClient = new SQLEXECUTEClient("OracleDBBinding_SQLEXECUTE");
// Set user name and password
sqlExecuteClient.ClientCredentials.UserName.UserName = "SCOTT";
sqlExecuteClient.ClientCredentials.UserName.Password = "TIGER";
// Open the client
sqlExecuteClient.Open();
如何跨进程边界提供更安全的数据交换?
Oracle 数据库适配器与使用该适配器的应用程序或服务一起托管在进程内。 由于适配器与使用者一起托管在进程内,因此无需为使用者与 Oracle 数据库适配器之间交换的消息提供安全性。 但是,如果使用的应用程序或服务将包含敏感数据库信息的消息跨进程边界发送到另一个服务或客户端,则应采取措施,为环境中的此数据提供足够的保护。 Windows Communication Foundation (WCF) 提供了许多选项来帮助保护在客户端和服务之间发送的消息。 有关帮助保护 WCF 中的客户端和服务之间发送的消息的详细信息,请参阅 保护服务和客户端。 有关 WCF 提供的安全功能的更多常规信息,请参阅 Windows Communication Foundation 安全性。