MyCat20——权限控制标签

205 阅读2分钟

1 user标签

1.1 设置标签

在mycat中,对逻辑库的读写权限进行了限制。通过 server.xml 配置文件中的 user 标签进行设置。

image.png

  • 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 查询

进行查询操作,可以查询出结果

image.png

1.2.3 插入

进行数据插入操作,报错,提示

image.png

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,并执行增删改查操作。

仅能成功执行更新操作。

image.png

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 表进行操作

image.png

仅允许对 orders 表做插入操作,因为 table 中配置的是 1000。

2.4.2 对其他表进行操作

image.png

可以对该表进行查询操作,因为 schema 中配置的是 0110。

2.5 结论

schema 中的权限,是对该逻辑库下所有表进行权限设置;

table 中的权限,是对该表进行权限设置,table 配置优先于 schema 配置;

当未在 table 中配置权限时,默认采用 schema 中的权限设置。