使用 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 Security

另请参阅

保护 Oracle 数据库应用程序
最佳实践