1 user标签
1.1 设置标签
在mycat中,对逻辑库的读写权限进行了限制。通过 server.xml 配置文件中的 user 标签进行设置。
- name 访问mycat逻辑库的用户名
- password 属性,用户对应的密码
- schemas 属性,应用连接的逻辑库,可以配置成一个或多个
- readOnly 属性,应用访问逻辑库所具有的权限:true 为只读,只能查询,不能进行插入、删除、修改操作;false 为读写权限,可进行增加、修改、删除和查询操作,默认为 false。
1.2 验证
1.2.1 登录
使用user用户访问mycat
mysql -uuser -puser -h192.168.137.3 -P8066
1.2.2 查询
进行查询操作,可以查询出结果
1.2.3 插入
进行数据插入操作,报错,提示
2 privileges标签
2.1 设置标签
privileges标签可以对逻辑库(schema)、表(table)进行精细化的DML权限控制。
<user name="user1">
<property name="password">123456</property>
<property name="schemas">TESTDB</property>
<privileges check="true">
<schema name="TESTDB" dml="0110" >
<table name="orders" dml="0100"></table>
</schema>
</privileges>
</user>
- privileges标签,是在user标签下,对user标签进行更加精细的权限控制
- check 是否启用privileges标签
- scheme 需要控制权限的逻辑库名
- dml 权限编码
- table 需要控制权限的表名,table 标签可以多个
2.2 权限编码
2.2.1 权限编码定义
| DML权限 | 新增 | 更新 | 查询 | 删除 |
|---|---|---|---|---|
| 0000 | 禁止 | 禁止 | 禁止 | 禁止 |
| 0010 | 禁止 | 禁止 | 可以 | 禁止 |
| 1000 | 可以 | 禁止 | 禁止 | 禁止 |
| 1111 | 可以 | 可以 | 可以 | 可以 |
从定义中可以看出来:
编号中 0 表示禁止,1表示允许。
四位编码的顺序为 创建、更新、查询、删除。
2.2.2 编码规则解析
- 如上边设置的 <schema name="TESTDB" dml="0110" >
即表示用户 user1 对逻辑库 TESTDB 具有更新和查询权限,但是不能新增和删除;
- 表的设置 <table name="orders" dml="0100">
表示用户 user1 对数据表 orders,可以执行更新操作,但是不能创建、查询和删除。
2.3 验证
修改 server.xml 配置文件后,保存并重启 mycat 服务。
2.3.1 访问mycat
使用用户 user1 访问 mycat
mysql -uuser1 -p123456 -h192.168.137.3 -P8066
2.3.2 操作数据
进入到逻辑库 TESTDB,并执行增删改查操作。
仅能成功执行更新操作。
2.4 权限交叉
当 schema 和 table 中的权限没有交集时,看看会发生什么
<user name="user1">
<property name="password">123456</property>
<property name="schemas">TESTDB</property>
<privileges check="true">
<schema name="TESTDB" dml="0110" >
<table name="orders" dml="1000"></table>
</schema>
</privileges>
</user>
保存并重启后,重新进入mycat。
2.4.1 对 orders 表进行操作
仅允许对 orders 表做插入操作,因为 table 中配置的是 1000。
2.4.2 对其他表进行操作
可以对该表进行查询操作,因为 schema 中配置的是 0110。
2.5 结论
schema 中的权限,是对该逻辑库下所有表进行权限设置;
table 中的权限,是对该表进行权限设置,table 配置优先于 schema 配置;
当未在 table 中配置权限时,默认采用 schema 中的权限设置。