如何用MyBatis配置Oracle的数据库网络加密?
How to configure Oracle's Database Network Encryption with MyBatis?
我需要使用 Mybatis 作为持久性框架对 Web 服务器和数据库服务器之间传输的数据进行加密。
数据库服务器是 Oracle 12c 企业版 Release 12.1.0.2.0 - 64 位。我正在使用 ojdbc7.jar 驱动程序。
我能够按照此处所述建立加密连接...https://docs.oracle.com/database/121/DBSEG/asojbdc.htm#DBSEG9613。但是,我无法通过 MyBatis 这样做。我在 mybatis-config.xml 文件中设置连接属性。以下是该文件的内容:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC '-//mybatis.org//DTD Config 3.0//EN' 'http://mybatis.org/dtd/mybatis-3-config.dtd'>
<configuration>
<settings>
<setting name="lazyLoadingEnabled" value="false" />
<setting name="jdbcTypeForNull" value="NULL"/>
</settings>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@//<server>:<port>/<service>"/>
<property name="username" value="<username>"/>
<property name="password" value="<password>"/>
<property name="poolMaximumActiveConnections" value="20"/>
<property name="poolMaximumIdleConnections" value="10"/>
<property name="poolMaximumCheckoutTime" value="180000"/>
<property name="poolPingQuery" value="select 0 from dual"/>
<property name="poolPingEnabled" value="true"/>
<property name="poolPingConnectionsNotUsedFor" value="1800000"/>
<property name="CONNECTION_PROPERTY_THIN_NET_ENCRYPTION_LEVEL" value="REQUIRED"/>
<property name="CONNECTION_PROPERTY_THIN_NET_ENCRYPTION_TYPES" value="AES256"/>
</dataSource>
</environment>
</environments>
</configuration>
最后两个 属性 元素是我尝试配置加密连接。没有它们,我可以在不加密的情况下成功连接。对于最后两个 属性 元素,我只得到一个错误:
Caused by: org.apache.ibatis.exceptions.PersistenceException: ###
Error building SqlSession. ### The error may exist in SQL Mapper
Configuration ### Cause: org.apache.ibatis.builder.BuilderException:
Error parsing SQL Mapper Configuration. Cause:
org.apache.ibatis.datasource.DataSourceException: Unknown DataSource
property: CONNECTION_PROPERTY_THIN_NET_ENCRYPTION_TYPES
有人知道怎么解决吗?
JDBC 属性的名称不太正确。请注意,它们可以在 oracle.jdbc.OracleConnection 下的 JavaDoc 中找到。您可以试试这些:
编辑:正如 Chris 在评论中解释的那样,MyBatis 要求驱动程序的 属性 名称以 "driver".
为前缀
<property name="driver.oracle.net.encryption_client" value="REQUIRED"/>
<property name="driver.oracle.net.encryption_types_client" value="(AES256)"/>
我需要使用 Mybatis 作为持久性框架对 Web 服务器和数据库服务器之间传输的数据进行加密。
数据库服务器是 Oracle 12c 企业版 Release 12.1.0.2.0 - 64 位。我正在使用 ojdbc7.jar 驱动程序。
我能够按照此处所述建立加密连接...https://docs.oracle.com/database/121/DBSEG/asojbdc.htm#DBSEG9613。但是,我无法通过 MyBatis 这样做。我在 mybatis-config.xml 文件中设置连接属性。以下是该文件的内容:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC '-//mybatis.org//DTD Config 3.0//EN' 'http://mybatis.org/dtd/mybatis-3-config.dtd'>
<configuration>
<settings>
<setting name="lazyLoadingEnabled" value="false" />
<setting name="jdbcTypeForNull" value="NULL"/>
</settings>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@//<server>:<port>/<service>"/>
<property name="username" value="<username>"/>
<property name="password" value="<password>"/>
<property name="poolMaximumActiveConnections" value="20"/>
<property name="poolMaximumIdleConnections" value="10"/>
<property name="poolMaximumCheckoutTime" value="180000"/>
<property name="poolPingQuery" value="select 0 from dual"/>
<property name="poolPingEnabled" value="true"/>
<property name="poolPingConnectionsNotUsedFor" value="1800000"/>
<property name="CONNECTION_PROPERTY_THIN_NET_ENCRYPTION_LEVEL" value="REQUIRED"/>
<property name="CONNECTION_PROPERTY_THIN_NET_ENCRYPTION_TYPES" value="AES256"/>
</dataSource>
</environment>
</environments>
</configuration>
最后两个 属性 元素是我尝试配置加密连接。没有它们,我可以在不加密的情况下成功连接。对于最后两个 属性 元素,我只得到一个错误:
Caused by: org.apache.ibatis.exceptions.PersistenceException: ### Error building SqlSession. ### The error may exist in SQL Mapper Configuration ### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.datasource.DataSourceException: Unknown DataSource property: CONNECTION_PROPERTY_THIN_NET_ENCRYPTION_TYPES
有人知道怎么解决吗?
JDBC 属性的名称不太正确。请注意,它们可以在 oracle.jdbc.OracleConnection 下的 JavaDoc 中找到。您可以试试这些:
编辑:正如 Chris 在评论中解释的那样,MyBatis 要求驱动程序的 属性 名称以 "driver".
为前缀<property name="driver.oracle.net.encryption_client" value="REQUIRED"/>
<property name="driver.oracle.net.encryption_types_client" value="(AES256)"/>