云服务器内容精选

  • 示例 以员工表emp,表的属主alice及角色matu、july为例,简要介绍数据脱敏过程。其中,表emp包含员工的姓名、手机号、邮箱、银行卡号、薪资等隐私数据 使用管理员用户连接数据库后,创建角色alice、matu和july。 1 2 3 CREATE ROLE alice PASSWORD 'password'; CREATE ROLE matu PASSWORD 'password'; CREATE ROLE july PASSWORD 'password'; 赋予alice、matu和july当前数据库的模式权限。 1 GRANT ALL PRIVILEGES on schema public to alice,matu,july; 切换至角色alice,创建表emp并插入三条员工信息。 1 2 3 4 5 6 7 SET ROLE alice PASSWORD 'password'; CREATE TABLE emp(id int, name varchar(20), phone_no varchar(11), card_no number, card_string varchar(19), email text, salary numeric(100, 4), birthday date); INSERT INTO emp VALUES(1, 'anny', '13420002340', 1234123412341234, '1234-1234-1234-1234', 'smithWu@163.com', 10000.00, '1999-10-02'); INSERT INTO emp VALUES(2, 'bob', '18299023211', 3456345634563456, '3456-3456-3456-3456', '66allen_mm@qq.com', 9999.99, '1989-12-12'); INSERT INTO emp VALUES(3, 'cici', '15512231233', NULL, NULL, 'jonesishere@sina.com', NULL, '1992-11-06'); alice将表emp的读取权限授予matu、july。 1 GRANT SELECT ON emp TO matu, july; 创建脱敏策略mask_emp,仅alice可查看员工所有信息,matu和july对员工银行卡号和薪资数据不可见。字段card_no是数值类型,采用MASK_FULL全脱敏成固定值0;字段card_string是字符类型,采用MASK_PARTIAL按指定的输入输出格式对原始数据进行部分脱敏;字段salary是数值类型,采用MASK_PARTIAL指定数字9部分脱敏倒数第二位前的所有数位值。 1 2 3 4 CREATE REDACTION POLICY mask_emp ON emp WHEN (current_user IN ('matu', 'july')) ADD COLUMN card_no WITH mask_full(card_no), ADD COLUMN card_string WITH mask_partial(card_string, 'VVVVFVVVVFVVVVFVVVV','VVVV-VVVV-VVVV-VVVV','#',1,12), ADD COLUMN salary WITH mask_partial(salary, '9', 1, length(salary) - 2); 切换到matu和july,查看员工表emp。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 SET ROLE matu PASSWORD 'password'; SELECT * FROM emp; id | name | phone_no | card_no | card_string | email | salary | birthday ----+------+-------------+---------+---------------------+----------------------+------------+--------------------- 1 | anny | 13420002340 | 0 | ####-####-####-1234 | smithWu@163.com | 99999.9990 | 1999-10-02 00:00:00 2 | bob | 18299023211 | 0 | ####-####-####-3456 | 66allen_mm@qq.com | 9999.9990 | 1989-12-12 00:00:00 3 | cici | 15512231233 | | | jonesishere@sina.com | | 1992-11-06 00:00:00 (3 rows) SET ROLE july PASSWORD 'password'; SELECT * FROM emp; id | name | phone_no | card_no | card_string | email | salary | birthday ----+------+-------------+---------+---------------------+----------------------+------------+--------------------- 1 | anny | 13420002340 | 0 | ####-####-####-1234 | smithWu@163.com | 99999.9990 | 1999-10-02 00:00:00 2 | bob | 18299023211 | 0 | ####-####-####-3456 | 66allen_mm@qq.com | 9999.9990 | 1989-12-12 00:00:00 3 | cici | 15512231233 | | | jonesishere@sina.com | | 1992-11-06 00:00:00 (3 rows) 若需要matu也有员工所有信息的查看权限,只有july不可见,修改策略生效范围即可。 1 2 SET ROLE alice PASSWORD 'password'; ALTER REDACTION POLICY mask_emp ON emp WHEN(current_user = 'july'); 切换到matu和july,重新查看员工表emp。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 SET ROLE matu PASSWORD 'password'; SELECT * FROM emp; id | name | phone_no | card_no | card_string | email | salary | birthday ----+------+-------------+------------------+---------------------+----------------------+------------+--------------------- 1 | anny | 13420002340 | 1234123412341234 | 1234-1234-1234-1234 | smithWu@163.com | 10000.0000 | 1999-10-02 00:00:00 2 | bob | 18299023211 | 3456345634563456 | 3456-3456-3456-3456 | 66allen_mm@qq.com | 9999.9900 | 1989-12-12 00:00:00 3 | cici | 15512231233 | | | jonesishere@sina.com | | 1992-11-06 00:00:00 (3 rows) SET ROLE july PASSWORD 'password'; SELECT * FROM emp; id | name | phone_no | card_no | card_string | email | salary | birthday ----+------+-------------+---------+---------------------+----------------------+------------+--------------------- 1 | anny | 13420002340 | 0 | ####-####-####-1234 | smithWu@163.com | 99999.9990 | 1999-10-02 00:00:00 2 | bob | 18299023211 | 0 | ####-####-####-3456 | 66allen_mm@qq.com | 9999.9990 | 1989-12-12 00:00:00 3 | cici | 15512231233 | | | jonesishere@sina.com | | 1992-11-06 00:00:00 (3 rows) 员工信息phone_no、email和birthday也是隐私数据,更新脱敏策略mask_emp,新增三个脱敏列。 1 2 3 4 SET ROLE alice PASSWORD 'password'; ALTER REDACTION POLICY mask_emp ON emp ADD COLUMN phone_no WITH mask_partial(phone_no, '*', 4); ALTER REDACTION POLICY mask_emp ON emp ADD COLUMN email WITH mask_partial(email, '*', 1, position('@' in email)); ALTER REDACTION POLICY mask_emp ON emp ADD COLUMN birthday WITH mask_full(birthday); 切换到july,查看表emp数据。 1 2 3 4 5 6 7 8 SET ROLE july PASSWORD 'password'; SELECT * FROM emp; id | name | phone_no | card_no | card_string | email | salary | birthday ----+------+-------------+---------+---------------------+----------------------+------------+--------------------- 1 | anny | 134******** | 0 | ####-####-####-1234 | ********163.com | 99999.9990 | 1970-01-01 00:00:00 2 | bob | 182******** | 0 | ####-####-####-3456 | ***********qq.com | 9999.9990 | 1970-01-01 00:00:00 3 | cici | 155******** | | | ************sina.com | | 1970-01-01 00:00:00 (3 rows) 通过视图redaction_policies和redaction_columns查看当前脱敏策略mask_emp的详细信息。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 SELECT * FROM redaction_policies; object_schema | object_owner | object_name | policy_name | expression | enable | policy_description | inherited ---------------+--------------+-------------+-------------+-----------------------------------+--------+--------------------+----------- public | alice | emp | mask_emp | ("current_user"() = 'july'::name) | t | | f (1 row) SELECT object_name, column_name, function_info FROM redaction_columns; object_name | column_name | function_info -------------+-------------+------------------------------------------------------------------------------------------------------- emp | card_no | mask_full(card_no) emp | card_string | mask_partial(card_string, 'VVVVFVVVVFVVVVFVVVV'::text, 'VVVV-VVVV-VVVV-VVVV'::text, '#'::text, 1, 12) emp | email | mask_partial(email, '*'::text, 1, "position"(email, '@'::text)) emp | salary | mask_partial(salary, '9'::text, 1, (length((salary)::text) - 2)) emp | birthday | mask_full(birthday) emp | phone_no | mask_partial(phone_no, '*'::text, 4) (6 rows) 新增一列salary_info,若需要将文本类型的薪资信息统一脱敏成“*.*”,可以创建自定义脱敏函数实现。此处采用PL/PGSQL语言定义脱敏函数mask_regexp_salary,创建脱敏列时,只需自定义脱敏的函数名和参数列表,详细内容可参考 GaussDB (DWS)用户自定义函数。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 SET ROLE alice PASSWORD 'password'; ALTER TABLE emp ADD COLUMN salary_info TEXT; UPDATE emp SET salary_info = salary::text; CREATE FUNCTION mask_regexp_salary(salary_info text) RETURNS text AS $$ SELECT regexp_replace($1, '[0-9]+','*','g'); $$ LANGUAGE SQL STRICT SHIPPABLE; ALTER REDACTION POLICY mask_emp ON emp ADD COLUMN salary_info WITH mask_regexp_salary(salary_info); SET ROLE july PASSWORD 'password'; SELECT id, name, salary_info FROM emp; id | name | salary_info ----+------+------------- 1 | anny | *.* 2 | bob | *.* 3 | cici | (3 rows) 无需为表emp设置敏感策略,删除脱敏策略mask_emp。 1 2 SET ROLE alice PASSWORD 'password'; DROP REDACTION POLICY mask_emp ON emp;
  • 数据管理流程 数据管理功能可以协助用户快速建立数据模型,为后续的脚本和作业开发提供数据实体。通过数据管理,您可以: 支持管理DWS、 MRS Hive、 DLI 等多种 数据湖 。 支持可视化和DDL方式管理数据库表。 注意,在MRS API连接方式下,不支持通过可视化方式查看与管理该连接下的数据库、数据表和字段。 单击可以查看数据连接目录树下的数据库、数据表以及字段信息。DWS SQL、DLI SQL、MRS Hive SQL代理模式均支持查看目录树,其他数据连接均不支持。 如果您在使用数据开发前,已创建了数据连接和对应的数据库和数据表,则可跳过数据管理操作,直接进入脚本开发或作业开发。 数据管理的使用流程如下: 图1 数据管理流程 创建数据连接,连接相关数据湖底座服务。具体请参见新建数据连接。 基于相应服务,新建数据库。具体请参见新建数据库。 如果是DWS连接,则需要新建数据库模式;否则直接新建数据表。具体请参见(可选)新建数据库模式。 新建数据表。具体请参见新建数据表。 父主题: 数据管理
  • 请求示例 修改数据库用户为user。 PUT https://das.cn-north-1.myhuaweicloud.com/v3/054e292c9880d4992f02c0196d3ea468/instances/da304cd5bbb944de828759bc7be3d3fein01/db-users/24c0c455-1f0e-448b-acb2-6e184b4ffcfa { "db_username" : "user", "db_user_password" : "password" }
  • URI PUT /v3/{project_id}/instances/{instance_id}/db-users/{db_user_id} 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 参数解释: 租户在某一Region下的项目ID。 获取方法请参见获取项目ID。 约束限制: 不涉及。 取值范围: 只能由英文字母、数字组成,且长度为32个字符。 默认取值: 不涉及。 instance_id 是 String 参数解释: 实例ID。标识实例的唯一标识。 约束限制: 不涉及。 取值范围: 只能由英文字母、数字组成,且长度为32个字符。 默认取值: 不涉及。 db_user_id 是 String 参数解释: 数据库用户ID。 约束限制: 不涉及。 取值范围: 只能由英文字母、数字、中划线组成,且长度为36个字符的UUID。 默认取值: 不涉及。
  • URI GET /v3/{project_id}/instances/{instance_id}/db-users 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 参数解释: 租户在某一Region下的项目ID。 获取方法请参见获取项目ID。 约束限制: 不涉及。 取值范围: 只能由英文字母、数字组成,且长度为32个字符。 默认取值: 不涉及。 instance_id 是 String 参数解释: 实例ID。标识实例的唯一标识。 约束限制: 不涉及。 取值范围: 只能由英文字母、数字组成,且长度为32个字符。 默认取值: 不涉及。 表2 Query参数 参数 是否必选 参数类型 描述 offset 否 Integer 参数解释: 索引位置,偏移量。从第一条数据偏移offset条数据后开始查询。例如:该参数指定为1,limit指定为10,则只展示第2~11条数据。 约束限制: 不涉及。 取值范围: [0, 2^31-1] 默认取值: 默认为0(偏移0条数据,表示从第一条数据开始查询)。 limit 否 Integer 参数解释: 查询记录数。例如该参数设定为10,则查询结果最多只显示10条记录。 约束限制: 不涉及。 取值范围: [1, 100] 默认取值: 默认为100。 db_user_id 否 String 参数解释: 数据库用户ID。 约束限制: 不涉及。 取值范围: 只能由英文字母、数字、中划线组成,且长度为36个字符的UUID。 默认取值: 不涉及。 db_username 否 String 参数解释: 数据库用户名称。 约束限制: 不涉及。 取值范围: 不涉及。 默认取值: 不涉及。
  • 响应参数 状态码: 200 表3 响应Body参数 参数 参数类型 描述 total Integer 参数解释: 总记录数。 取值范围: [0, 2^31-1],实际取决于查询。 db_users Array of DbUser objects 参数解释: 数据库用户列表。 取值范围: 不涉及。 表4 DbUser 参数 参数类型 描述 db_user_id String 参数解释: 数据库用户ID。 取值范围: 由英文字母、数字、中划线组成,且长度为36个字符的UUID。 db_username String 参数解释: 数据库用户名称。 取值范围: 不涉及。
  • 请求示例 查询元数据锁列表。 GET https://das.cn-north-1.myhuaweicloud.com/v3/054e292c9880d4992f02c0196d3ea468/instances/da304cd5bbb944de828759bc7be3d3fein01/metadata-locks?db_user_id=2c250598-1e3c-4d31-bc19-be1d866247e6&thread_id=12121&database=example&table=example
  • 响应示例 状态码: 200 { "metadata_locks" : [ { "thread_id" : "4096619", "lock_status" : "GRANTED", "lock_mode" : "MDL_SHARED_READ", "lock_type" : "Table metadata lock", "lock_duration" : "MDL_TRANSACTION", "table_schema" : "test_zyr", "table_name" : "test2", "user" : "root", "time" : "40", "host" : "das server", "database" : "test_zyr", "command" : "Sleep", "state" : "", "sql" : null, "trx_exec_time" : "341", "block_process" : [ ], "wait_process" : [ ] } ], "count" : 1 }
  • URI GET /v3/{project_id}/instances/{instance_id}/metadata-locks 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 参数解释: 租户在某一Region下的项目ID。 获取方法请参见获取项目ID。 约束限制: 不涉及。 取值范围: 只能由英文字母、数字组成,且长度为32个字符。 默认取值: 不涉及。 instance_id 是 String 参数解释: 实例ID。标识实例的唯一标识。 约束限制: 仅支持MySQ L实例 。 取值范围: 只能由英文字母、数字组成,且长度为32个字符。 默认取值: 不涉及。 表2 Query参数 参数 是否必选 参数类型 描述 db_user_id 是 String 参数解释: 数据库用户ID。 约束限制: 不涉及。 取值范围: 只能由英文字母、数字、中划线组成,且长度为36个字符的UUID。 默认取值: 不涉及。 thread_id 否 String 参数解释: 会话ID。 约束限制: 不涉及。 取值范围: [0, 2^31-1],实际取决于查询。 默认取值: 不涉及。 database 否 String 参数解释: 数据库名称。 约束限制: 仅支持MySQL实例的数据库。 取值范围: 不涉及。 默认取值: 不涉及。 table 否 String 参数解释: 数据库表名。 约束限制: 仅支持MySQL实例的数据库的表。 取值范围: 不涉及。 默认取值: 不涉及。
  • 响应参数 状态码: 200 表3 响应Body参数 参数 参数类型 描述 metadata_locks Array of MetadataLock objects 参数解释: 元数据锁列表。 取值范围: 不涉及。 count Integer 参数解释: 元数据锁数量。 取值范围: [0, 2^31-1],实际取决于查询。 表4 MetadataLock 参数 参数类型 描述 thread_id String 参数解释: 会话ID。 取值范围: [0, 2^31-1],实际取决于查询。 lock_status String 参数解释: 锁状态。 取值范围: PENDING:等待锁 GRANTED:持有锁 lock_mode String 参数解释: 加锁模式。 取值范围: MDL_SHARED MDL_EXCLUSIVE MDL_SHARED_READ MDL_SHARED_WRITE lock_type String 参数解释: 锁类型。 取值范围: Table metadata lock:表元数据锁 Schema metadata lock:库元数据锁 Tablespace lock:表空间锁 Global read lock:全局读锁 lock_duration String 参数解释: 锁范围。 取值范围: MDL_STATEMENT:语句级别 MDL_TRANSACTION:事务级别 MDL_EXPLICIT:global级别 table_schema String 参数解释: 锁所在的数据库,对于部分Global read lock级别的元数据锁,该值为空。 取值范围: 不涉及。 table_name String 参数解释: 表名。 取值范围: 不涉及。 user String 参数解释: 用户。 取值范围: 不涉及。 time String 参数解释: 时间。 取值范围: 不涉及。 host String 参数解释: 主机。 取值范围: 不涉及。 database String 参数解释: 会话所在的数据库。 取值范围: 不涉及。 command String 参数解释: 命令。 取值范围: 不涉及。 state String 参数解释: 状态。 取值范围: 不涉及。 sql String 参数解释: SQL语句。 取值范围: 不涉及。 trx_exec_time String 参数解释: 事务执行时间。 取值范围: 不涉及。 block_process Array of Process objects 参数解释: 阻塞会话列表。 取值范围: 不涉及。 wait_process Array of Process objects 参数解释: 等待会话列表。 取值范围: 不涉及。 表5 Process 参数 参数类型 描述 id String 参数解释: 会话ID。 取值范围: [0, 2^31-1],实际取决于查询。 user String 参数解释: 用户。 取值范围: 不涉及。 host String 参数解释: 主机。 取值范围: 不涉及。 database String 参数解释: 数据库。 取值范围: 不涉及。 command String 参数解释: 命令。 取值范围: 不涉及。 time String 参数解释: 会话持续时间。 取值范围: 不涉及。 state String 参数解释: 状态。 取值范围: 不涉及。 sql String 参数解释: SQL语句。 取值范围: 不涉及。 trx_executed_time String 参数解释: 事务持续时间。 取值范围: 不涉及。
  • URI DELETE /v3/{project_id}/instances/{instance_id}/db-users/{db_user_id} 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 参数解释: 租户在某一Region下的项目ID。 获取方法请参见获取项目ID。 约束限制: 不涉及。 取值范围: 只能由英文字母、数字组成,且长度为32个字符。 默认取值: 不涉及。 instance_id 是 String 参数解释: 实例ID。标识实例的唯一标识。 约束限制: 不涉及。 取值范围: 只能由英文字母、数字组成,且长度为32个字符。 默认取值: 不涉及。 db_user_id 是 String 参数解释: 数据库用户ID。 约束限制: 不涉及。 取值范围: 只能由英文字母、数字、中划线组成,且长度为36个字符的UUID。 默认取值: 不涉及。
  • 响应参数 状态码: 200 表2 响应Body参数 参数 参数类型 描述 quotas Array of Quotas objects 参数解释: 配额列表对象。 取值范围: 不涉及。 表3 Quotas 参数 参数类型 描述 resources Array of Resource objects 参数解释: 资源列表对象。 取值范围: 不涉及。 表4 Resource 参数 参数类型 描述 type String 参数解释: 根据type过滤查询指定类型的配额。 取值范围: 云DBA:cloudDba used Long 参数解释: 已创建的资源个数。 取值范围: [0, 2^31-1],实际取决于查询。 quota Long 参数解释: 资源的最大配额数。 取值范围: [0, 2^31-1],实际取决于查询。 min Long 参数解释: 允许修改的配额最小值。 取值范围: [0, 2^31-1],实际取决于查询。
  • 请求参数 表2 请求Body参数 参数 是否必选 参数类型 描述 db_user_id 否 String 参数解释: 数据库用户ID。 约束限制: 不涉及。 取值范围: 只能由英文字母、数字、中划线组成,且长度为36个字符的UUID。 默认取值: 不涉及。 database 否 String 参数解释: 数据库名称。 约束限制: 仅支持MySQL实例的数据库。 取值范围: 不涉及。 默认取值: 不涉及。 sql 否 String 参数解释: SQL语句。 约束限制: 不涉及。 取值范围: 不涉及。 默认取值: 不涉及。
  • 响应参数 状态码: 200 表3 响应Body参数 参数 参数类型 描述 execution_plans Array of ExecutionPlan objects 参数解释: SQL执行计划列表。 取值范围: 不涉及。 error_message String 参数解释: SQL执行失败时,显示执行错误信息。 取值范围: 不涉及。 表4 ExecutionPlan 参数 参数类型 描述 id String 参数解释: 执行计划id。 取值范围: [0, 2^31-1],实际取决于查询。 select_type String 参数解释: select子句的类型。 取值范围: 不涉及。 table String 参数解释: 数据库表。 取值范围: 不涉及。 partitions String 参数解释: 查询将匹配记录的分区。 取值范围: 不涉及。 type String 参数解释: 访问类型。 取值范围: 不涉及。 possible_keys String 参数解释: 可能使用的键(索引)。 取值范围: 不涉及。 key String 参数解释: 实际使用的键(索引)。 取值范围: 不涉及。 key_len String 参数解释: 决定使用的键的长度。 取值范围: 不涉及。 ref String 参数解释: 使用哪个列或常数与键一起来选择行。 取值范围: 不涉及。 rows String 参数解释: MySQL认为它执行查询时必须检查的行数。 取值范围: 不涉及。 filtered String 参数解释: 按表条件过滤的表行的估计百分比。 取值范围: 不涉及。 extra String 参数解释: 其他信息。 取值范围: 不涉及。
  • 请求示例 查询SQL执行计划(POST请求) POST https://das.cn-north-1.myhuaweicloud.com/v3/054e292c9880d4992f02c0196d3ea468/instances/da304cd5bbb944de828759bc7be3d3fein01/sql/explain { "db_user_id" : "2c250598-1e3c-4d31-bc19-be1d866247e6", "database" : "abc", "sql" : "select 1" }