2013-02-26 49 views
2

我怎样才能加密此数据配置部分?:Solr的配置,对数据进行加密的配置文件

<dataConfig> 
<dataSource type="JdbcDataSource" driver="com.microsoft.sqlserver.jdbc.SQLServerDriver" 
url="jdbc:sqlserver://127.0.0.1;databaseName=emp" user="user" password="user"/> 
<document name="reviews"> 
    <entity name="COMMON" query="select id,name from users" > 
     <field column="id" name="id"/> 
     <field column="name" name="name"/> 
    </entity> 
</document> 
</dataConfig> 

基本上,我不想暴露用户名和密码。或者,如果数据配置文件不能被加密(部分或完全),我可以使用SolrJ来索引数据库,这样我就不必配置数据配置文件了吗?也就是说,我使用SolrJ apis传递url和认证参数?

回答

4

一个更安全的选择,我建议是配置JNDI在您的网络服务器。

如何配置JNDI? This Page解释了如何在Tomcat中这样做。它也可以用于其他流行的网络服务器。

您可以在您的数据配置文件使用JNDI名称如下:

< dataSource name="xyz" jndiName="jdbc/xyz" type="JdbcDataSource"/> 
+0

你确定Solr DataImportHandler支持jndiName属性吗?我在[列表](http://wiki.apache.org/solr/DataImportHandler#Configuring_JdbcDataSource)中看不到它。 – 2013-02-27 14:13:09

+0

我也没有在这个列表中看到它。我得到的印象是我必须执行以下操作之一:1.通过以下定义的类插入数据源:[link](http://wiki.apache.org/solr/DataImportHandler#datasource) 2.参数化,因为我在这里提到:[链接](http://stackoverflow.com/questions/12745073/encryption-of-dataconfig-section-fields-in-solr/15123453#15123453)3.使用属性(见下文)但是如何解决我无法在系统的任何地方以明文方式输入密码的问题? – 2013-02-27 22:43:00

+2

@AlexandreRafalovitch我对此很肯定,因为我一直在使用“jndiName”属性来指定项目中的数据库连接凭据。 – Mavellin 2013-02-28 03:59:31

1

参见:https://wiki.apache.org/solr/SolrConfigXml#System_property_substitution

你可以把它们作为属性文件<solr.home>/conf/solrcore.properties并在您的数据配置是指他们。所以,你的数据-config.xml文件将是这样的:

<dataSource type="JdbcDataSource" 
      driver="com.microsoft.sqlserver.jdbc.SQLServerDriver"  
      url="jdbc:sqlserver://${jdbc.host}:${jdbc.port}/${db.name}" 
      user="${jdbc.username}" 
      password="${jdbc.password}"/> 

这里的一切在${...}是像solrcore.properties属性:

jdbc.host=http://127.0.0.1 
jdbc.port=3306 
db.name=emp 
... 
+0

感谢阿伦 - 但可以在该属性文件进行加密,这样SOLR解密属性值?我们的问题是,我们无法在任何地方的任何文件中以明文形式输入任何密码。 – 2013-02-27 22:41:23

+0

我不知道。尝试询问solr用户邮件列表。 – arun 2013-02-27 23:52:40