权限管理
登录权限
Mycat2在MySQL网络协议的时候检查客户端的IP,用户名,密码
其中IP使用正则表达式匹配,一旦匹配成功,就放行
SQL权限
使用自定义拦截器实现
1.22-2022-6-9后
这个是注释的例子,在本地配置文件改也可以
/*+ mycat:createUser{"password":"123456","role":{"disallowSqlTypes":["CREATE","DROP"]},"transactionType":"proxy","username":"root"} */;/*+ mycat:createUser{"password":"123456","role":null,//不设权限"transactionType":"proxy","username":"root"} */;
"role":{"disallowSqlTypes":["CREATE","DROP"]},
disallowSqlTypes是禁止的sql类型,其中SQL注释是UNKNOWN类型
SELECT,UPDATE,INSERT_SELECT,INSERT_VALUES,INSERT,DELETE,MERGE,CREATE,ALTER,DROP,TRUNCATE,REPLACE,ANALYZE,EXPLAIN,SHOW,DESC,SET,DUMP_DATA,LIST, // for analyticdbWHO, // for analyticdbGRANT,REVOKE,COMMIT,ROLLBACK,USE,KILL,MSCK,ADD_USER,REMOVE_USER,CREATE_USER,CREATE_TABLE,CREATE_TABLE_AS_SELECT,CREATE_VIEW,CREATE_FUNCTION,CREATE_ROLE,DROP_USER,DROP_TABLE,DROP_VIEW,DROP_FUNCTION,DROP_RESOURCE,ALTER_USER,ALTER_TABLE,READ,ADD_TABLE,TUNNEL_DOWNLOAD,UPLOAD,UNKNOWN
对于已经创建连接,对它用户进行权限变更是不生效的,必须把连接杀死重新连接,或者直接把整个mycat重启
二次开发的接口是这样的
public boolean checkSQLType(SQLType sqlType, String defaultSchema, SQLStatement sqlStatement) {SQLType是上述的sql类型defaultSchema是当前默认库sqlStatement是接受到的sql,返回值是是否放行这个sql}
