0%

安全设置

安全设置

Mycat作为一个连接数据库的中间件,距离数据是非常的近,所以还是需要进行一些安全的设置

权限控制

在server.xml中配置user标签进行权限控制

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<!-- 用户 -->
<user name="mycat" defaultAccount="true">

<property name="password">123456</property>
<property name="schemas">TESTDB</property>
<property name="defaultSchema">TESTDB</property>
<!--No MyCAT Database selected 错误前会尝试使用该schema作为schema,不设置则为null,报错 -->

<!-- 库级 表级 DML 权限设置
check为true则检查权限
dml权限
0000 禁止insert、update、select、delete
0010 可以select
1110 可以insert、uodate、select
1111 都可以
-->
<!--
<privileges check="false">
<schema name="TESTDB" dml="0110" >
<table name="tb01" dml="0000"></table>
<table name="tb02" dml="1111"></table>
</schema>
</privileges>
-->
</user>

<user name="user">
<property name="password">user</property>
<property name="schemas">TESTDB</property>
<!-- 只读 -->
<property name="readOnly">true</property>
<property name="defaultSchema">TESTDB</property>
</user>

sql拦截

除了上述介绍的Mycat可以进行权限控制,还可以使用防火墙进行ip、sql的控制,server.xml配置文件中使用firewall来定义防火墙

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<!-- 全局SQL防火墙设置 -->
<!--白名单可以使用通配符%或着*-->
<!--例如<host host="127.0.0.*" user="root"/>-->
<!--例如<host host="127.0.*" user="root"/>-->
<!--例如<host host="127.*" user="root"/>-->
<!--例如<host host="1*7.*" user="root"/>-->
<!--这些配置情况下对于127.0.0.1都能以root账户登录-->

<firewall>
<!-- ip白名单,某主机某用户可以访问 -->
<whitehost>
<host host="1*7.0.0.*" user="root"/>
</whitehost>
<!-- sql黑名单,对sql操作进行拦截
check=true才会生效
-->
<blacklist check="true">
<property name="deleteAllow">false</property>
</blacklist>
</firewall>

黑名单配置项说明

配置项 缺省值 描述
selelctAllow true 是否允许执行SELECT语句
selectAllColumnAllow true 是否允许执行SELECT * FROM T这样的语句。如果设置为false,不允许执行select * from t,这个选项是防御程序通过调用select *获得数据表的结构信息。
selectIntoAllow true SELECT查询中是否允许INTO字句
deleteAllow true 是否允许执行DELETE语句
updateAllow true 是否允许执行UPDATE语句
insertAllow true 是否允许执行INSERT语句
replaceAllow true 是否允许执行REPLACE语句
mergeAllow true 是否允许执行MERGE语句,这个只在Oracle中有用
callAllow true 是否允许通过jdbc的call语法调用存储过程
setAllow true 是否允许使用SET语法
truncateAllow true truncate语句是危险,缺省打开,若需要自行关闭
createTableAllow true 是否允许创建表
alterTableAllow true 是否允许执行Alter Table语句
dropTableAllow true 是否允许修改表
commentAllow false 是否允许语句中存在注释,Oracle的用户不用担心,Wall能够识别hints和注释的区别
noneBaseStatementAllow false 是否允许非以上基本语句的其他语句,缺省关闭,通过这个选项就能够屏蔽DDL
multiStatementAllow false 是否允许一次执行多条语句,缺省关闭
useAllow true 是否允许执行mysql的use语句,缺省打开
describeAllow true 是否允许执行mysql的describe语句,缺省打开
showAllow true 是否允许执行mysql的show语句,缺省打开
commitAllow true 是否允许执行commit操作
rollbackAllow true 是否允许执行roll back操作