租户之间的隔离:用户租户下创建的用户、表,其他租户都看不到。那问题来了 —— 既然隔离了,我自己的用户、表、系统变量应该去哪里看?这篇把常见查询方式整理一下,分 MySQL 兼容模式和 Oracle 兼容模式两种情况。
一、查用户
用户租户下创建的用户,只能登录到本租户,对其他租户不可见。
- MySQL 兼容模式的租户:可以从 mysql.user 这个视图查询用户信息;
- Oracle 兼容模式的租户:可以从 ALL_USERS 这个系统视图查询用户信息。
二、查表
用户租户下可以创建表,创建之后对其他租户不可见。
- MySQL 兼容模式的租户:可以从 information_schema.tables 视图查询本租户所有用户表的信息;
- Oracle 兼容模式的租户:可以从 ALL_TABLES 视图查询本租户所有用户表的信息。
三、查系统变量
用户租户只能在本租户下修改本租户的系统变量。
- MySQL 兼容模式的租户:可以从 information_schema.global_variables 和 information_schema.session_variables 视图查询,也可以直接用 SHOW VARIABLES 语句;
- Oracle 兼容模式的租户:直接使用 SHOW VARIABLES 语句查询本租户所有的系统变量。
总结一下规律:查什么、用什么视图,第一件事是确认自己的租户是 MySQL 兼容还是 Oracle 兼容模式。两种模式给出的视图名字不一样,但对应用的隔离规则是一致的 —— 所有信息都只在本租户范围内可见。把这个规律记下来,日常排查用户权限、表是否存在、参数改没改生效这类问题,基本不会走弯路。