权限管理
登录权限
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 analyticdb
WHO, // for analyticdb
GRANT,
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
}