连接MyCat的用户名和密码以及MyCat连接数据主机的用户名和密码都是写在配置文件中,如果用明文编写,往往是不安全的很容易泄露。MyCat也考虑到了密码的安全问题,为我们提供了密码加密的方式。
1.前端连接MyCat的密码加密
连接MyCat的用户名和密码是在server.xml文件中的<user></user>标签中配置的。
<user name="root" defaultAccount="true">
<property name="password">root</property>
<property name="schemas">TESTDB</property>
<!-- 密码是否加密 -->
<property name="usingDecrypt">0</property>
<!-- 此用户是否只读 -->
<property name="readOnly">false</property>
<!-- 表级 DML 权限设置 -->
<!--
<privileges check="false">
<schema name="TESTDB" dml="0110" >
<table name="tb01" dml="0000"></table>
<table name="tb02" dml="1111"></table>
</schema>
</privileges>
-->
</user>
将目录切换到mycat的安装目录下的lib目录中,有一个Mycat-server-XXXXX-release.jar的jar包,XXXXX表示的是mycat的版本。版本不同数字也不同。在当前目录下运行以下命令:
加密命令
java -cp Mycat-server-1.6.7.1-release.jar io.mycat.util.DecryptUtil 0:root:root
运行结果
CrjpLhvVJkHk0EPW35Y07dUeTimf52zMqClYQkIAN3/dqiG1DVUe9Zr4JLh8Kl+1KH1zd7YTKu5w04QgdyQeDw==
只需要将上述命令的运行结果替换之前的明文密码,就完成了mycat登录密码的加密。当然还需要将usingDecrypt的属性值修改为1。
加密命令的解释:
java -cp 【加密程序jar包】 【加密类】 0:用户名:密码
java -cp 运行指定jar包中的指定类
【加密程序jar包】 你自己lib目录下的Mycat-server-XXXXX-release.jar文件
【加密类】 mycat中的加密类io.mycat.util.DecryptUtil,不用变
0 表示是对mycat登录验证的密码进行加密
2.MyCat后端连接数据主机的密码加密
mycat连接数据主机的信息是在schema.xml文件中配置的
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<!-- 心跳检测语句 -->
<heartbeat>select user()</heartbeat>
<!-- 配置读写分离,需要用到mysql的准备模式,此处不设置读写分离 -->
<writeHost host="hostM1" url="127.0.0.1:3306" user="root" password="root">
<!-- can have multi read hosts -->
<!--
<readHost host="hostS2" url="192.168.1.200:3306" user="root" password="xxx" />
-->
</writeHost>
<!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
</dataHost>
同样还是在mycat的安装目录下的lib目录中,运行以下命令将明文加密。将密文替换原有的明文,在writehost标签中添加属性usingDecrypt="1",表示开启密码加密。
加密命令:
java -cp Mycat-server-1.6.7.1-release.jar io.mycat.util.DecryptUtil 1:hostM1:root:root
运行结果:
Bg/6QzS47Mq77VtK1P+jOrCOq6AVzQjTLByvrCFrsySXELi1b3hmpBWFLin0JciKRYREzZZKiQLEttXUq2x+Cg==
对比上一条加密命令可以发现,这两条加密名优稍微有点不同。
1:表示对mycat连接数据主机的密码进行加密
hostM1:表示对哪一个数据主机进行加密(因为mycat可以连接多个数据主机,所以要指明此条密文是针对哪个数据主机的)
通过以上方式完成了对密码的加密,在mycat的服务中不会再有明文的密码出现了。
注意:
1.加密命令必须在mycat安装目录下的lib目录中运行
2.使用加密后的密码,必须配置属性usingDecrypt为1