安全管理对数据库至关重要,OceanBase 有专门的安全管理策略用来保证数据库数据安全和资源安全。OceanBase的安全管理策略主要包括资源隔离和权限控制:通过资源隔离限制可以访问到的数据,隔离保证资源安全;对于共享数据,通过权限设置访问权限,从而保证数据安全。
租户管理
系统租户和普通租户
OceanBase 支持多租户架构,租户是数据库对象管理和资源管理的基础,即租户即是各类数据库对象的容器,又是资源(CPU、Memory、IO等)的容器。
多租户架构有很多的好处,在数据安全方面,不允许跨租户的数据访问,确保用户的数据资产没有泄露的风险;在资源使用方面,租户独占其资源配额。通过多租户架构,我们将数据和资源分离开来,这样就保证了数据资源在不同租户之间的安全性。
OceanBase1.0 系统中包含两大类租户:系统租户和普通租户。系统租户是系统内置的,用于保存 OceanBase正常运行的一些资源,进行集群管理操作和存储系统表。只有系统租户下的 root 用户能够增加和删除普通租户,修改系统配置项和进行每日合并等一些重要功能操作。
租户权限管理
在 OceanBase中,不同租户之间的数据对象是完全隔离的,对象名字空间的最顶层就是租户。OceanBase的租户权限管理可以由如下几点来进行概括:
任何租户(不论是系统租户还是普通租户)下的用户不能跨租户访问其他普通租户下的用户数据。
不支持跨租户对用户进行授权。举例来说就是:A租户下的管理员用户u1,不能将A租户下的表t1的读写权限授予B租户下的任何用户。
只有系统租户下的管理员用户才有集群管理权限,执行系统管理操作,如创建/删除普通租户、设置系统配置参数、开启每日合并操作。
普通租户下的用户及权限和MySQL实例类似,既有具备租户内管理员权限的特权用户,也有普通用户。权限的授予及回收也和单个MySQL实例相同。在跨租户数据访问方面有一个小小的例外,那就是普通租户下的用户,如果他具备访问系统视图的权限,实际上他是可以访问到系统租户下的系统表数据的,因为所有元信息都存放在系统租户下的系统表里。
用户权限管理
数据库用户权限管理包括新建用户、删除用户、修改密码、修改用户名、锁定用户、用户授权和撤销授权等。OceanBase中用户分为两类:系统租户下的用户,一般租户下的用户。创建用户时,如果Session当前租户为系统租户,则新建的用户为系统租户用户;反之为一般租户下的用户。
用户名称在租户内是唯一的,不同租户下的用户可以同名。用户名@租户名在系统全局唯一。为区别系统租户和一般租户下的用户,建议对系统租户下的用户名称使用特定前缀。系统租户和普通租户都有一个内置用户root,系统租户的root为系统管理员,普通租户的root为租户管理员,购买了某个普通租户的客户得到普通租户root和密码,进行本租户范围的管理工作。
一般租户下的用户只能拥有该租户下对象的访问权限,权限设计和MySQL兼容;系统租户下的用户可以被授予跨租户的对象访问权限。当前系统租户下的用户不允许访问一般租户下的用户表数据。
用户在登录OceanBase系统时需指定唯一的租户名。对于系统租户下的用户,在登录后,可以切换当前访问的租户;对于一般租户下的用户,不能切换到其他租户。
对于权限,可以分成以下几个层级:
全局层级:适用于所有的数据库。使用GRANT ALL ON *.*授予全局权限。
数据库层级:适用于一个给定数据库中的所有目标。使用GRANT ALL ON db_name.*授予数据库权限。
表层级:表权限适用于一个给定表中的所有列。使用GRANT ALL ON db_name.tbl_name授予表权限。
权限信息如下表所示。
权限 | 说明 |
ALL PRIVILEGES | 除GRANT OPTION以外所有权限。 |
ALTER | ALTER TABLE的权限。 |
CREATE | CREATE TABLE的权限。 |
CREATE USER | CREATE USER,DROP USER,RENAME USER和REVOKE ALL PRIVILEGES的权限。 |
CREATE TABLEGROUP | 全局CREATE TABLEGROUP的权限。 |
DELETE | DELETE的权限。 |
DROP | DROP的权限。 |
GRANT OPTION | GRANT OPTION的权限。 |
INSERT | INSERT的权限。 |
SELECT | SELECT的权限。 |
UPDATE | UPDATE的权限。 |
SUPER | SET GLOBAL修改全局系统参数的权限。 |
SHOW DATABASES | 全局 SHOW DATABASES的权限。 |
INDEX | CREATE INDEX, DROP INDEX的权限。 |
CREATE VIEW | 创建、删除视图的权限。 |
SHOW VIEW | SHOW CREATE VIEW权限。 |
在 OceanBase 中,每个租户对应一个 MySQL 实例,OceanBase 的用户权限管理做到了和 MySQL 的兼容,操作和MySQL 都是一样的。在用户的基础上,OceanBase 增加了多租户机制,因此也引入了租户权限管理,规定了不同租户之间数据和资源的使用权限。通过租户权限管理和用户权限管理保证了 OceanBase 的安全。