首批通过分布式安全可靠测评,为关键业务系统打造
列加密权限管理
更新时间:2026-06-08 20:31:49
在配置好列加密规则后,合理的权限管理是确保数据安全的关键环节。本文档将详细介绍 OceanBase 列加密功能的权限体系和管理语法,帮助你建立完善的权限控制机制,确保敏感数据只对授权用户可见。
准备工作
在使用敏感规则之前,需要开启 TDE 加密功能,并创建主密钥:
-- 设置透明表空间加密的方式,取值参见 tde_method(如 internal、obcloud、ocp 等)
ALTER SYSTEM SET tde_method = '<encryption_method>';
ALTER INSTANCE ROTATE INNODB MASTER KEY; -- 首次执行需要等待约 20 秒使秘钥生效
tde_method 参数具体说明请参见 tde_method。
权限类型
列加密功能采用基于规则的权限类型,通过数据保护规则控制用户对敏感列的访问权限。OceanBase 在 MySQL 权限体系中新增了专门的权限类型来支持列加密功能,包含用户级权限和敏感规则级权限。
用户级权限
| 权限名称 | 说明 | 默认拥有者 | 升级处理 | 权限限制 | 功能范围 | 包含关系 |
|---|---|---|---|---|---|---|
| CREATE SENSITIVE RULE | 允许用户创建和删除敏感规则。 | root 用户。 | 系统升级时自动赋予。 | root 用户权限不能被 REVOKE。 |
可使用 CREATE/DROP SENSITIVE RULE 语法。 |
包含在 ALL PRIVILEGES 中。 |
| PLAINACCESS | 允许用户访问所有明文数据,不受数据保护规则影响。 | root 用户。 | 系统升级时自动赋予。 | root 用户权限不能被 REVOKE。 |
可访问所有明文数据,不受任何数据保护规则影响。 | 不包含在 ALL PRIVILEGES 中。 |
敏感规则级权限
| 权限名称 | 说明 | 权限范围 | 自动授权 |
|---|---|---|---|
| PLAINACCESS | 允许用户访问特定规则所关联列的明文数据。 | 拥有某条规则上的 PLAINACCESS 权限的用户可以访问这条规则所关联的列的明文数据。 |
创建规则的用户不会自动拥有这条规则的 PLAINACCESS 权限。 |
权限管理
授予权限语法及示例
授予用户级权限
语法如下:
-- 授予用户/角色创建敏感规则的权限. 该权限只有用户级 GRANT CREATE SENSITIVE RULE ON *.* TO <user_or_role_list>; -- 授予用户/角色用户级明文访问权限 GRANT PLAINACCESS ON *.* TO <user_or_role_list>;语法及参数说明如下:
语法/参数 说明 示例 user_or_role_list用户或角色列表参数,多个用户用逗号分隔。
示例:u1, u2, r1*.*授予用户级(全局)权限的固定语法,表示全局范围的所有数据库和表。 示例如下:
-- 授予用户 u1 创建敏感规则的权限 GRANT CREATE SENSITIVE RULE ON *.* TO u1; -- 可以一次性对多个用户/角色授予权限 -- 授予用户 u2 和角色 r1 创建敏感规则的权限 GRANT CREATE SENSITIVE RULE ON *.* TO u2, r1;授予规则级权限
语法如下:
-- 规则级赋权。注意需要使用 SENSITIVE RULE 关键字 GRANT PLAINACCESS ON SENSITIVE RULE <rule_name> TO <user_or_role_list>;参数说明如下:
参数 说明 示例 rule_name敏感规则的名称 'salary_encryption','credit_card_rule'user_or_role_list用户或角色列表,多个用户用逗号分隔 u1, u2, r1示例如下:
-- 授予 u1 用户级的明文访问权限(同理可以对多个用户/角色同时授予权限) GRANT PLAINACCESS ON *.* TO u1; REVOKE PLAINACCESS ON *.* FROM u1; -- 授予 u1 对于规则 r1 的明文访问权限 -- 同理可以对多个用户/角色同时授予权限(但一次只能授予一个规则上的权限) GRANT PLAINACCESS ON SENSITIVE RULE r1 TO u1;
撤销权限语法及示例
撤销用户级权限
语法如下:
-- 撤回用户/角色创建敏感规则的权限. 该权限只有用户级 REVOKE CREATE SENSITIVE RULE ON *.* FROM <user_or_role_list>; -- 撤回用户/角色的用户级明文访问权限 REVOKE PLAINACCESS ON *.* FROM <user_or_role_list>;语法及参数说明如下:
语法/参数 说明 示例 user_or_role_list用户或角色列表参数,多个用户用逗号分隔。
示例:u1, u2, r1*.*撤销用户级(全局)权限的固定语法,表示全局范围的所有数据库和表。 示例如下:
-- 撤权 REVOKE CREATE SENSITIVE RULE ON *.* FROM u1; -- 可以一次性对多个用户/角色撤回权限 -- 撤回用户 u2 和角色 r1 创建敏感规则的权限 REVOKE CREATE SENSITIVE RULE ON *.* FROM u2, r1;撤销规则级权限
语法如下:
-- 规则级撤权。注意需要使用 SENSITIVE RULE 关键字 REVOKE PLAINACCESS ON SENSITIVE RULE <rule_name> FROM <user_or_role_list>;参数说明:
参数 说明 示例 rule_name敏感规则的名称 'salary_encryption','credit_card_rule'user_or_role_list用户或角色列表,多个用户用逗号分隔 u1, u2, r1示例如下:
-- 撤回 u1 用户级的明文访问权限(同理可以对多个用户/角色同时撤回权限) REVOKE PLAINACCESS ON *.* FROM u1; -- 撤回 u1 对于规则 r1 的明文访问权限 -- 同理可以对多个用户/角色同时撤回权限(但一次只能撤回一个规则上的权限) REVOKE PLAINACCESS ON SENSITIVE RULE r1 FROM u1;
查看权限
查看敏感规则
支持查看当前租户下的所有敏感数据保护规则,或查看指定表、指定数据库关联的所有敏感规则。支持使用
LIKE子句过滤规则名。语法如下:
SHOW SENSITIVE RULES opt_show_condition | SHOW SENSITIVE RULES from_or_in relation_factor opt_from_or_in_database_clause opt_show_condition | SHOW SENSITIVE RULES from_or_in DATABASE from_or_in database_factor opt_show_condition;参数说明:
参数 说明 示例 opt_show_condition可选的显示条件,如 LIKE子句LIKE '%rule1%'relation_factor表名 tb1,employeesdatabase_factor数据库名 test,hr_db示例如下,
tb1表在test数据库中:-- 查看当前租户下所有的 sensitive rules SHOW SENSITIVE RULES; -- 查看 tb1 关联的所有数据保护规则 SHOW SENSITIVE RULES FROM tb1; -- 查看 test.tb1 关联的所有数据保护规则 SHOW SENSITIVE RULES FROM tb1 FROM test; -- 查看 test DB 关联的所有数据保护规则 SHOW SENSITIVE RULES FROM DATABASE test; -- 使用 LIKE 子句过滤规则名 SHOW SENSITIVE RULES LIKE '%rule1%'; SHOW SENSITIVE RULES FROM tb1 LIKE '%rule1%'; SHOW SENSITIVE RULES FROM tb1 FROM test LIKE '%rule1%'; SHOW SENSITIVE RULES FROM DATABASE test LIKE '%rule1%';返回结果形式示例如下:
列名 rule_id rule_name POLICY METHOD ENABLED PROTECT_COLS 示例 1 'ENCRYPT_COL' 'ENCRYPTION' 'AES-256-ECB' 'YES' 'db1.tbl1(col_1, col_2), db2.tbl2(col_3), db3.tbl4(col_4, col_5)' 返回结果字段说明:
字段名 说明 示例值 rule_id规则 ID,系统自动生成 1,2rule_name规则名称 'ENCRYPT_COL'POLICY策略类型 'ENCRYPTION'METHOD加密方法 'AES-256-ECB'ENABLED是否启用 'YES','NO'PROTECT_COLS受保护的列,格式为 database.table(columns)'db1.tbl1(col_1, col_2)',不同表之间以逗号隔开。查看用户权限
语法如下:
-- 查看指定用户的所有权限 SHOW GRANTS FOR <user_or_role_list>; -- 查看当前用户的权限 SHOW GRANTS;示例如下:
-- 查看用户 u1 的所有权限 SHOW GRANTS FOR u1;返回结果示例如下:
+-----------------------------------------------------------+ | Grants for u1@% | +-----------------------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO u1 WITH GRANT OPTION | | GRANT CREATE SENSITIVE RULE ON *.* TO u1; | | GRANT PLAINACCESS ON *.* TO u1; | | GRANT PLAINACCESS ON `enc_rule1` TO u1; | | GRANT PLAINACCESS ON `enc_rule2` TO u1; | +-----------------------------------------------------------+
相关文档
- 列加密功能概述
- 创建列加密规则
- 查看敏感级规则的定义及其属性,请参见DBA/CDB_OB_SENSITIVE_RULES