安全管理对数据库至关重要,OceanBase 有专门的安全管理策略用来保证数据库数据安全和资源安全。OceanBase的安全管理策略主要包括资源隔离和权限控制:通过资源隔离限制可以访问到的数据,隔离保证资源安全;对于共享数据,通过权限设置访问权限,从而保证数据安全。

    租户管理

    系统租户和普通租户

    OceanBase 支持多租户架构,租户是数据库对象管理和资源管理的基础,即租户即是各类数据库对象的容器,又是资源(CPU、Memory、IO等)的容器。

    安全管理 - 图1

    多租户架构有很多的好处,在数据安全方面,不允许跨租户的数据访问,确保用户的数据资产没有泄露的风险;在资源使用方面,租户独占其资源配额。通过多租户架构,我们将数据和资源分离开来,这样就保证了数据资源在不同租户之间的安全性。

    OceanBase1.0 系统中包含两大类租户:系统租户和普通租户。系统租户是系统内置的,用于保存 OceanBase正常运行的一些资源,进行集群管理操作和存储系统表。只有系统租户下的 root 用户能够增加和删除普通租户,修改系统配置项和进行每日合并等一些重要功能操作。

    租户权限管理

    在 OceanBase中,不同租户之间的数据对象是完全隔离的,对象名字空间的最顶层就是租户。OceanBase的租户权限管理可以由如下几点来进行概括:

    1. 任何租户(不论是系统租户还是普通租户)下的用户不能跨租户访问其他普通租户下的用户数据。

    2. 不支持跨租户对用户进行授权。举例来说就是:A租户下的管理员用户u1,不能将A租户下的表t1的读写权限授予B租户下的任何用户。

    3. 只有系统租户下的管理员用户才有集群管理权限,执行系统管理操作,如创建/删除普通租户、设置系统配置参数、开启每日合并操作。

    4. 普通租户下的用户及权限和MySQL实例类似,既有具备租户内管理员权限的特权用户,也有普通用户。权限的授予及回收也和单个MySQL实例相同。在跨租户数据访问方面有一个小小的例外,那就是普通租户下的用户,如果他具备访问系统视图的权限,实际上他是可以访问到系统租户下的系统表数据的,因为所有元信息都存放在系统租户下的系统表里。

    用户权限管理

    数据库用户权限管理包括新建用户、删除用户、修改密码、修改用户名、锁定用户、用户授权和撤销授权等。OceanBase中用户分为两类:系统租户下的用户,一般租户下的用户。创建用户时,如果Session当前租户为系统租户,则新建的用户为系统租户用户;反之为一般租户下的用户。

    用户名称在租户内是唯一的,不同租户下的用户可以同名。用户名@租户名在系统全局唯一。为区别系统租户和一般租户下的用户,建议对系统租户下的用户名称使用特定前缀。系统租户和普通租户都有一个内置用户root,系统租户的root为系统管理员,普通租户的root为租户管理员,购买了某个普通租户的客户得到普通租户root和密码,进行本租户范围的管理工作。

    一般租户下的用户只能拥有该租户下对象的访问权限,权限设计和MySQL兼容;系统租户下的用户可以被授予跨租户的对象访问权限。当前系统租户下的用户不允许访问一般租户下的用户表数据。

    用户在登录OceanBase系统时需指定唯一的租户名。对于系统租户下的用户,在登录后,可以切换当前访问的租户;对于一般租户下的用户,不能切换到其他租户。

    对于权限,可以分成以下几个层级:

    1. 全局层级:适用于所有的数据库。使用GRANT ALL ON *.*授予全局权限。

    2. 数据库层级:适用于一个给定数据库中的所有目标。使用GRANT ALL ON db_name.*授予数据库权限。

    3. 表层级:表权限适用于一个给定表中的所有列。使用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 的安全。