权限管理

Mycat2中的权限管理分为两个部分

登录权限

Mycat2在MySQL网络协议的时候检查客户端的IP,用户名,密码
其中IP使用正则表达式匹配,一旦匹配成功,就放行

SQL权限

使用自定义拦截器实现

1.22-2022-6-9后

这个是注释的例子,在本地配置文件改也可以

  1. /*+ mycat:createUser{
  2. "password":"123456",
  3. "role":{
  4. "disallowSqlTypes":["CREATE","DROP"]
  5. },
  6. "transactionType":"proxy",
  7. "username":"root"
  8. } */;
  9. /*+ mycat:createUser{
  10. "password":"123456",
  11. "role":null,//不设权限
  12. "transactionType":"proxy",
  13. "username":"root"
  14. } */;
  1. "role":{
  2. "disallowSqlTypes":["CREATE","DROP"]
  3. },

disallowSqlTypes是禁止的sql类型,其中SQL注释是UNKNOWN类型

  1. SELECT,
  2. UPDATE,
  3. INSERT_SELECT,
  4. INSERT_VALUES,
  5. INSERT,
  6. DELETE,
  7. MERGE,
  8. CREATE,
  9. ALTER,
  10. DROP,
  11. TRUNCATE,
  12. REPLACE,
  13. ANALYZE,
  14. EXPLAIN,
  15. SHOW,
  16. DESC,
  17. SET,
  18. DUMP_DATA,
  19. LIST, // for analyticdb
  20. WHO, // for analyticdb
  21. GRANT,
  22. REVOKE,
  23. COMMIT,
  24. ROLLBACK,
  25. USE,
  26. KILL,
  27. MSCK,
  28. ADD_USER,
  29. REMOVE_USER,
  30. CREATE_USER,
  31. CREATE_TABLE,
  32. CREATE_TABLE_AS_SELECT,
  33. CREATE_VIEW,
  34. CREATE_FUNCTION,
  35. CREATE_ROLE,
  36. DROP_USER,
  37. DROP_TABLE,
  38. DROP_VIEW,
  39. DROP_FUNCTION,
  40. DROP_RESOURCE,
  41. ALTER_USER,
  42. ALTER_TABLE,
  43. READ,
  44. ADD_TABLE,
  45. TUNNEL_DOWNLOAD,
  46. UPLOAD,
  47. UNKNOWN

对于已经创建连接,对它用户进行权限变更是不生效的,必须把连接杀死重新连接,或者直接把整个mycat重启

二次开发的接口是这样的

  1. public boolean checkSQLType(SQLType sqlType, String defaultSchema, SQLStatement sqlStatement) {
  2. SQLType是上述的sql类型
  3. defaultSchema是当前默认库
  4. sqlStatement是接受到的sql,
  5. 返回值是是否放行这个sql
  6. }