作为ColdFusion数据源,我们正在使用Oracle瘦客户端与数据库连接。因此,基本上,我们使用的是JDBC URL,例如jdbc:oracle:thin:@ ...并作为驱动程序类oracle.jdbc.OracleDriver
这可以成功进行,但是我们也想设置加密和完整性参数。在Java中,这可以通过在获得连接之前如下设置Properties对象来类似地完成:
Properties prop = new Properties();
prop.put("oracle.net.encryption_client", "REQUIRED");
prop.put("oracle.net.encryption_types_client", "( DES40 )");
prop.put("oracle.net.crypto_checksum_client", "REQUESTED");
prop.put("oracle.net.crypto_checksum_types_client", "( MD5 )");
...
OracleDataSource ods = new OracleDataSource();
ods.setProperties(prop);
ods.setURL("jdbc:oracle:thin:@localhost:1521:main");
Connection conn = ods.getConnection();
...
有没有一种方法可以将这些参数传递给ColdFusion数据源。理想情况下,我希望以不需要更改所有cfquery或cfstoredproc的方式集中进行此操作。
我也知道在Oracle AS等应用服务器中,创建数据源时会显示“添加属性”选项。您可以在其中添加此类属性。因此,我正在考虑也许在应用程序中创建JNDI DS。服务器,然后神奇地连接到它,但这可能会对应用程序产生一些影响。
除此之外,我还考虑通过CF管理员API(cfide.adminapi.administrator)与CF数据源进行通信,还可以选择扩展Oracle驱动程序,以便在CF与之连接时已经设置了这些参数。
我很乐意就此提出您的专业意见和建议。
最佳答案
我知道这是一个老问题了...
您绝对可以将连接字符串属性传递给任何ColdFusion数据源。
在CF ADMIN中打开数据源后,请打开“高级设置”。您可以在“高级设置”选项卡中更改的第一个选项是“连接字符串”。这将是在与数据库的连接上传递的所有用&符号分隔的名称/值对。
例如:
encryption_client=REQUIRED&encryption_types_client=DES40&crypto_checksum_client=REQUESTED&crypto_checksum_types_client=MD5`
但是,OP的答案是,您也可以在JDBC URL上传递参数。
例如:
使用Progress Datadirect驱动程序,您的JDBC URL可能如下所示:
jdbc:datadirect:oracle://server;SID=someSID;encryption_client=REQUIRED;encryption_types_client=DES40;crypto_checksum_client=REQUIRED;crypto_checksum_types_client=MD5
请记住,您的参数用分号而不是逗号分隔。
定义数据源时,请确保您使用的驱动程序类型正确。本机数据源设置屏幕上某些功能不可用,因此要使用更高级的功能,可能需要使用OTHER。