通常情况下我们在使用IBatisNet的时候,配置文件和映射文件都是暴露在外的,如果能进入到服务器,那么你的程序的操作数据库的SQL语句,数据库连接字符串等信息都将很轻松的被看到,这样是很危险的。然而IBatisnet自身也没有提供配置文件直接加密的方法,但我们可以用变通的方式来尽可能的保护这些文件中的信息。IBatisnet的映射文件等可以指定为内嵌的资源,利用这个我们可以把一些敏感信息写到另外一个配置文件中,并设置这个配置文件的Build Action为embedded Resource。具体操作如下:
一、假设我们映射文件的路径为 ~@Maps/,我们将所有的映射文件都设置为“内嵌的资源”,SqlMap.config文件直接在根目录下。
二、建立一个properties.config文件,添加一些敏感信息(即不能直接让别人看到的信息)。如下:
三、SqlMap.config文件的配置
这样发布后的代码中,只能看到SqlMap.config中的内容,映射文件和数据库连接字符串等信息就被编译到DLL中去了。
一、假设我们映射文件的路径为 ~@Maps/,我们将所有的映射文件都设置为“内嵌的资源”,SqlMap.config文件直接在根目录下。
二、建立一个properties.config文件,添加一些敏感信息(即不能直接让别人看到的信息)。如下:
<?
xml version="1.0" encoding="utf-8"
?>
< settings >
<!-- User application and configured property settings go here. -->
<!-- Example: <add key="settingName" value="settingValue"/> -->
< add key ="provider" value ="sqlServer1.1" />
< add
key ="connectionString"
value ="server=.;database=DocumentSystem;uid=sa;pwd=" />
< add key ="root" value ="TVSystem.Web._Maps." />
< add key ="assembly" value ="TVSystem.Web" />
</ settings >
< settings >
<!-- User application and configured property settings go here. -->
<!-- Example: <add key="settingName" value="settingValue"/> -->
< add key ="provider" value ="sqlServer1.1" />
< add
key ="connectionString"
value ="server=.;database=DocumentSystem;uid=sa;pwd=" />
< add key ="root" value ="TVSystem.Web._Maps." />
< add key ="assembly" value ="TVSystem.Web" />
</ settings >
三、SqlMap.config文件的配置
<?
xml version="1.0" encoding="utf-8"
?>
< sqlMapConfig
xmlns ="http://ibatis.apache.org/dataMapper"
xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" >
< properties embedded ="TVSystem.Web.properties.config" />
< settings >
< setting useStatementNamespaces ="false" />
</ settings >
< providers resource ="providers.config" />
<!-- Database connection information -->
< database >
< provider name ="${provider}" />
< dataSource name ="DocumentSystem" connectionString ="${connectionString}" />
</ database >
< sqlMaps >
< sqlMap embedded ="${root}Department.xml,${assembly}" />
< sqlMap embedded ="${root}Stream.xml,${assembly}" />
< sqlMap embedded ="${root}Employees.xml,${assembly}" />
< sqlMap embedded ="${root}Relations.xml,${assembly}" />
</ sqlMaps >
</ sqlMapConfig >
< sqlMapConfig
xmlns ="http://ibatis.apache.org/dataMapper"
xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" >
< properties embedded ="TVSystem.Web.properties.config" />
< settings >
< setting useStatementNamespaces ="false" />
</ settings >
< providers resource ="providers.config" />
<!-- Database connection information -->
< database >
< provider name ="${provider}" />
< dataSource name ="DocumentSystem" connectionString ="${connectionString}" />
</ database >
< sqlMaps >
< sqlMap embedded ="${root}Department.xml,${assembly}" />
< sqlMap embedded ="${root}Stream.xml,${assembly}" />
< sqlMap embedded ="${root}Employees.xml,${assembly}" />
< sqlMap embedded ="${root}Relations.xml,${assembly}" />
</ sqlMaps >
</ sqlMapConfig >
这样发布后的代码中,只能看到SqlMap.config中的内容,映射文件和数据库连接字符串等信息就被编译到DLL中去了。