华为云用户手册

  • 开启虚拟MFA功能 Multi-Factor Authentication (简称MFA) 是一种非常简单的安全实践方法,建议您给华为账号以及您账号中具备较高权限的用户开启MFA功能,它能够在用户名和密码之外再额外增加一层保护。启用MFA后,用户登录控制台时,系统将要求用户输入用户名和密码(第一安全要素),以及来自其MFA设备的验证码(第二安全要素)。这些多重要素结合起来将为您的账户和资源提供更高的安全保护。 MFA设备可以基于硬件也可以基于软件,系统目前仅支持基于软件的虚拟MFA,虚拟MFA是能产生6位数字认证码的应用程序,此类应用程序可在移动硬件设备(包括智能手机)上运行,非常方便。
  • 在ECS实例上运行的应用程序使用ECS委托 在华为云ECS实例上运行的应用程序需要凭证才能访问其他华为云服务。若要以安全的方式提供应用程序所需的凭证,可使用ECS委托获取临时访问密钥。在ECS获取临时访问密钥,需要在IAM上对ECS授权,并对相应的弹性云服务器资源进行授权委托管理。ECS通过向IAM申请指定委托的临时凭证,从而安全访问资源。ECS会为您自动轮换这些临时凭证,从而确保每次申请的临时凭证安全、有效。 当您启动 ECS 实例时,您可指定实例的委托,以作为启动参数。在 ECS 实例上运行的应用程序在访问华为云资源时可使用委托的临时访问密钥,同时委托的权限将确定允许访问资源的应用程序。
  • 定期修改身份凭证 如果您不知道自己的密码或访问密钥已泄露,定期进行修改可以将不小心泄露的风险降至最低。 定期轮换密码可以通过设置密码有效期策略进行,您以及您账号中的用户在设置的时间内必须修改密码,否则密码将会失效,IAM会在密码到期前15天开始提示用户修改密码。 轮换访问密钥可以通过创建两个访问密钥进行,将两个访问密钥作为一主一备,一开始先使用主访问密钥一,一段时间后,使用备访问密钥二,然后在控制台删除主访问密钥一,并重新生成一个访问密钥,在您的应用程序中定期轮换使用。
  • 合理设置访问方式 IAM支持为用户设置编程访问、管理控制台访问方式,请参考如下说明为IAM用户设置访问方式: 如果IAM用户仅需登录管理控制台访问云服务,建议访问方式选择管理控制台访问,凭证类型为密码。 如果IAM用户仅需编程访问华为云服务,建议访问方式选择编程访问,凭证类型为访问密钥。 如果IAM用户需要使用密码作为编程访问的凭证(部分API要求),建议访问方式选择编程访问,凭证类型为密码。 如果IAM用户使用部分云服务时,需要在其控制台验证访问密钥(由IAM用户输入),建议访问方式选择编程访问和管理控制台访问,凭证类型为密码和访问密钥。例如IAM用户在控制台使用云数据迁移CDM服务创建数据迁移,需要通过访问密钥进行身份验证。
  • 不给华为账号创建访问密钥 华为账号是您华为云资源归属、资源使用计费的主体,对其所拥有的资源及云服务具有完全的访问权限。密码与访问密钥(AK/SK)都是账号的身份凭证,具有同等效力,密码用于登录界面控制台,是您必须具备的身份凭证,访问密钥用于使用开发工具进行编程调用,是第二个身份凭证,为辅助性质,非必须具备。为了提高账号安全性,建议您仅使用密码登录控制台即可,不要给账号创建第二个身份凭证(访问密钥),避免因访问密钥泄露带来的信息安全风险。
  • Internet Explorer浏览器下输入框提示信息无法自动消失怎么办 当用户进行登录、注册、绑定华为账号、创建用户、找回密码、修改密码等操作时,由于当前输入框不能完全支持Internet Explorer 8及以下版本的浏览器,所以出现输入框提示信息(如“最短不能少于5个字符”等提示信息)无法自动消失的情况,可以参照以下方法进行操作。 图1 提示信息无法消失 升级浏览器版本 将Internet Explorer浏览器升级到IE9及以上版本再进行操作。 更换浏览器 使用Firefox浏览器(38.0及以上版本)或Google Chrome浏览器(43.0及以上版本)进行操作。 父主题: 其他问题
  • 操作步骤 进入API Explorer平台获取IAM用户Token接口。 选择Region,编辑获取用户Token接口的请求参数,进行具体的API调用。 Region 在Region下拉列表选取您需要访问的区域。 Params nocatalog为非必填,如果设置该参数,返回的响应体中将不显示catalog信息。任何非空字符串都将解释为true,并使该字段生效。 Body 通过切换输入方式可以选择表单填写或文本输入请求体。 表单填写:通过表单填写完成请求体,无需了解JSON语法,参考示例填写参数值。 文本输入:通过文本输入完成请求体,可以直接在编辑框内编写JSON格式的请求体。 { "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "domain": { "name": "IAM用户所属账号名" }, "name": "IAM用户名", "password": "IAM用户的登录密码" } } }, "scope": { "domain": { "name": "IAM用户所属账号名" } } } } 参数说明请参见:请求参数。 如果是第三方系统用户,没有在本系统设置登录密码,可以通过系统登录页面的找回密码功能设置登录密码,并在password中输入新设置的密码。 单击调试,发送API请求。 在返回的响应体中查看获取的用户Token,用户调用IAM其他API接口时,可以使用该Token进行鉴权。 Token的有效期为24小时,需要使用一个Token鉴权时,可以先缓存起来,避免频繁调用。 如果返回错误码,例如401,表示认证失败,请确认Request Body中请求参数填写正确后重新发送请求。
  • 解决方法 可能原因:您已设置的API访问控制策略暂未生效。 解决方法:API访问控制策略应用后,将在2小时内生效,请耐心等待。 可能原因:当前区域暂不支持API访问控制功能。 解决方法:当前仅华北-北京四不支持API访问控制功能,建议您切换至其他区域使用。 获取IAM用户Token(使用密码)API不受ACL校验影响。 可能原因:API访问控制功能在对象存储服务(OBS)不生效。 解决方案:OBS服务暂不支持API访问控制策略,如需限制,请参考限制指定IP地址对桶的访问权限。
  • 操作步骤 编辑获取用户Token接口的Request URL、Header、Body,进行具体的API调用。 Request URL 格式为:https://IAM地区与终端节点地址/API接口URI 访问网址:地区与终端节点,获取IAM区域与终端节点地址。 图1 IAM区域与终端节点 访问网址:获取用户Token,获取API接口的URI。 以cn-north-1为例,则Request URL为:https://iam.cn-north-1.myhuaweicloud.com/v3/auth/tokens 选择API接口获取方式,并将Request URL填写至postman中。 图2 Request URL示例 Request Header key:Content-Type,value:application/json;charset=utf8 图3 Headers参数示例 Request Body 修改Request Body样例中参数。 { "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "domain": { "name": "账号名" }, "name": "IAM用户名", "password": "IAM用户密码" } } }, "scope": { "domain": { "name": "账号名" } } } } 登录获取Token的IAM用户,并获取账号名、IAM用户名,方法请参见:获取账号、IAM用户、项目名称和ID。 单击“Send”,发送API请求。 图4 发送API请求 在返回的响应头中查看获取的用户Token,用户调用IAM其他API接口时,可以使用该Token进行鉴权。 图5 获取Token 如果返回值为401,表示认证失败,请确认Request Body中请求参数填写正确后重新发送请求。 如果返回值为400,表示body体格式错误,请检查body体格式是否满足json语法。详细错误请参考获取token返回值。 如果您的调试结果异常,提示“Header Overflow”,可以参考故障处理解决Header溢出问题。
  • 操作步骤 登录统一身份认证服务控制台。 在左侧导航窗格中,选择“安全设置”,单击“访问控制”页签。 访问控制仅对账号下的IAM用户生效,对账号本身不生效。 在“访问控制”界面中,选择控“控制台访问”页签,设置允许访问的IP地址或网段。 “允许访问的IP地址区间”:限制用户只能从设定范围内的IP地址登录。 “允许访问的IP地址或网段”:限制用户只能从设定的IP地址或网段登录。 例如:10.10.10.10/32 “允许访问的IP地址区间”和“允许访问的IP地址或网段”同时设置时只要满足其中一种即可允许访问。 单击“应用”。
  • 修订记录 表1 修订记录 日期 修订记录 2021-12-31 第二十八次正式发布。 新增以下章节: API访问控制策略不生效怎么办 2021-06-02 第二十七次正式发布。 新增以下章节: 账号被锁定怎么办 2021-04-27 第二十六次正式发布。 新增以下章节: 如何修改操作保护验证方式 2021-03-27 第二十五次正式发布。 新增以下章节: 账号管理类 2020-12-30 第二十四次正式发布。 根据登录界面变更、安全设置功能变更、界面词条变更进行全文刷新。 2020-12-28 第二十三次正式发布。 新增以下章节: 如何授予IAM用户不能支付订单、可以提交订单权限 2020-12-15 第二十二次正式发布。 优化以下章节: 无法找到特定服务的权限怎么办 2020-11-20 第二十一次正式发布。 新增以下章节: 如何通过API Explorer获取用户Token 优化以下章节: 如何通过Postman获取用户Token 2020-10-27 第二十次正式发布。 根据HUAWEI ID登录方式下线刷新以下章节图片: 忘记密码怎么办 忘记密码怎么办 2020-09-27 第十九次正式发布。 新增以下章节: 虚拟MFA验证码校验不通过怎么办 2020-09-11 第十八次正式发布。 根据登录方式变更刷新以下章节图片: 忘记密码怎么办 IAM用户登录失败怎么办 2020-09-10 第十七次正式发布。 新增以下章节: Token鉴权失败怎么办 2020-06-08 第十六次正式发布。 根据新增HUAWEI ID登录方式变更以下章节内容或图片: 忘记密码怎么办 IAM用户登录失败怎么办 2020-01-02 第十四次正式发布。 根据界面风格变化刷新各章节图片。 2019-09-02 第十三次正式发布。 新增IAM用户登录失败怎么办章节。 2019-08-20 第十二次正式发布。 新增区域和可用区章节。 2019-08-09 第十一次正式发布。 新增如何关闭操作保护章节。 2019-07-13 第十次正式发布。 根据界面变更修改以下章节: 如何开启登录验证功能 如何绑定虚拟MFA设备 如何解绑、重置虚拟MFA 如何修改密码 2019-07-04 第九次正式发布。 根据界面变更修改忘记密码怎么办章节。 2019-06-11 第八次正式发布。 新增无法找到特定服务的权限怎么办章节。 新增权限没有生效怎么办章节。 新增创建委托时提示权限不足怎么办章节。 2019-06-06 第七次正式发布。 新增如何修改密码章节。 新增IAM用户和企业子账号的区别章节。 2019-05-22 第六次正式发布。 新增如何获取Security Administrator权限的Token章节。 2019-03-11 第五次正式发布。 新增忘记密码怎么办章节。 2019-02-20 第四次正式发布。 新增IAM和企业管理的区别章节。 2018-07-02 第二次正式发布。 新增如何通过Postman获取用户Token章节。 2018-04-30 第一次正式发布。
  • 获取方法 您是账号本身,需要为自己创建一个IAM用户,授予该用户Security Administrator权限后,调用获取用户Token接口即可获取具有Security Administrator权限的Token。 您是账号下的IAM用户,需要管理员给您授予Security Administrator权限后,才能获取具有Security Administrator权限Token,否则只能获取您自身已有权限的Token。
  • Security Administrator权限说明 表1 Security Administrator权限说明 权限名称 所属区域 权限描述 Security Administrator 全局 IAM的管理员权限,可以对IAM执行所有操作,包括但不限于: 创建、修改、删除IAM用户。 创建、修改、删除用户组、给用户组授权。 创建、修改、删除自定义策略。 创建、修改项目。 创建、修改、删除委托。 创建、修改、删除身份提供商。 设置账号安全策略。
  • 问题排查 可能原因:管理员授予IAM用户所在用户组的权限不正确。 解决方法:管理员确认并修改授予IAM用户所在用户组的权限,方法请参考:修改用户组权限,权限详情请参考:系统权限。 可能原因:管理员授予的权限已拒绝相关操作的授权项。 解决方法:管理员查看已授予IAM用户的系统权限详情,确认已授予的权限是否有拒绝操作的语句,方法请参考策略语法。如系统权限无法满足您的场景需要,管理员可以创建自定义策略,允许该操作对应的授权项,方法请参考:创建自定义策略。 可能原因:管理员给用户组授予权限后,忘记将IAM用户添加至用户组中。 解决方法:管理员将IAM用户添加至用户组中,方法请参见:用户组添加用户。 可能原因:对于区域级服务,管理员没有在在对应的区域进行授权。 解决方法:管理员在对IAM所在用户组授权时,选择对应的区域。如果管理员授予用户默认区域项目的权限,用户只能访问该默认项目中的资源,不拥有该默认项目下IAM子项目的权限,建议您授予IAM用户最小区域权限,方法请参见:给用户组授权。 可能原因:对于区域级服务,IAM用户登录控制台后,没有切换到授权区域。 解决方法:IAM用户访问区域级服务时,请切换至授权区域,方法请参见:切换区域。 可能原因:管理员授予的OBS权限由于系统设计的原因,授权后需等待15-30分钟才可生效。 解决方法:请IAM用户和管理员等待15-30分钟后重试。 可能原因:您所属账号已欠费,无法使用该资源。 解决方法:请管理员在“费用中心”确认账单并充值,方法请参见:账户充值。 可能原因:浏览器缓存导致权限信息未更新。 解决方法:请清理浏览器缓存后重试。 可能原因:该服务可能提供独立权限控制,如软件开发生产线 CodeArts、对象存储服务OBS。 解决方法:请查看对应服务帮助文档,并授予用户对应权限。如CodeArts各角色的权限是怎样的、OBS权限控制概述。 可能原因:管理员同时在IAM和企业管理给用户授权,基于企业项目管理权限可能不生效。IAM鉴权优先于企业管理,如IAM用户同时拥有所有资源的ECS ReadOnlyAccess、企业项目A的ECS ReadOnlyAccess权限,用户可以查看所有ECS资源。 解决方法:请管理员根据情况在IAM控制台修改用户权限。
  • 升级华为账号后,还可以用原华为云账号登录吗 您已经注册过华为账号 如果华为账号与华为云账号信息(手机号码、邮件地址、账号名)一致,可继续使用原华为云账号登录;如果华为账号与华为云账号的部分信息不一致,就不能用原华为云不一致的信息登录(例如:手机号码相同,邮件地址不同时,不能用原华为云账号中的邮件地址登录)。 您从未注册过华为账号 升级后账号登录信息不变,您可继续用原手机号码、邮件地址、账号名登录。 父主题: 账号管理类
  • 临时安全凭证与永久安全凭证的差异 临时安全凭证存在有效期,可以在15分钟至24小时之间进行设置;永久安全凭证的有效期为永久,并且不能进行设置。 临时安全凭证没有数量限制;每个IAM用户最多可创建2个永久安全凭证。 临时安全凭证通过接口临时访问密钥AK/SK获取;永久安全凭证通过我的凭证界面控制台获取。 临时安全凭证为动态生成,即时使用,不能嵌入应用程序中,或者进行存储,到期后无法重复使用,只能重新获取。
  • 示例 以员工表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,创建脱敏列时,只需自定义脱敏的函数名和参数列表,详细内容可参考用户自定义函数。 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表所有列的定义,做适当的类型转换以适配DWS语法,创建OBS外表: 1 2 3 4 5 6 7 8 9 10 11 12 CREATE FOREIGN TABLE rtd_mfdt_int_currency_ft( _hoodie_commit_time text, _hoodie_commit_seqno text, _hoodie_record_key text, _hoodie_partition_path text, _hoodie_file_name text, ... )SERVER obs_server OPTIONS ( foldername '/erpgc-obs-test-01/s000/sbi_fnd/rtd_mfdt_int_currency_t/', format 'hudi', encoding 'utf-8' )distribute by roundrobin; 其中,foldername为hudi数据在OBS上存储路径,对应MRS中Spark-sql表定义中的LOCATION,末尾要以“/”结尾。
  • SIMILAR TO SIMILAR TO操作符根据自己的模式判断是否匹配给定串而返回真或者假。它和LIKE非常类似,只不过它使用SQL标准定义的正则表达式理解模式。 匹配规则 和LIKE一样,SIMILAR TO操作符只有在它的模式匹配整个串的时候才返回真。如果要匹配在串内任何位置的序列,该模式必须以百分号开头和结尾。 下划线 (_)代表(匹配)任何单个字符; 百分号(%)代表任意串的通配符。 SIMILAR TO也支持下面这些从POSIX正则表达式借用的模式匹配元字符。 表1 模式匹配元字符 元字符 含义 | 表示选择(两个候选之一)。 * 表示重复前面的项零次或更多次。 + 表示重复前面的项一次或更多次。 ? 表示重复前面的项零次或一次。 {m} 表示重复前面的项刚好m次。 {m,} 表示重复前面的项m次或更多次。 {m,n} 表示重复前面的项至少m次并且不超过n次。 () 把多个项组合成一个逻辑项。 [...] 声明一个字符类,就像POSIX正则表达式一样。 前导逃逸字符可以禁止所有这些元字符的特殊含义。逃逸字符的使用规则和LIKE一样。 注意事项 如果SIMILAR TO正则表达式重复匹配字符数量非常庞大,由于受递归大小限制,执行语句会失败并报错invalid regular expression: regular expression is too complex,可尝试调大GUC参数max_stack_depth。 正则表达式函数 支持使用函数substring(string from pattern for escape)截取匹配SQL正则表达式的子字符串。 示例 1 2 3 4 5 SELECT 'abc' SIMILAR TO 'abc' AS RESULT; result ----------- t (1 row) 1 2 3 4 5 SELECT 'abc' SIMILAR TO 'a' AS RESULT; result ----------- f (1 row) 1 2 3 4 5 SELECT 'abc' SIMILAR TO '%(b|d)%' AS RESULT; result ----------- t (1 row) 1 2 3 4 5 SELECT 'abc' SIMILAR TO '(b|c)%' AS RESULT; result ----------- f (1 row)
  • POSIX正则表达式 正则表达式是一个字符序列,它是定义一个串集合 (一个正则集)的缩写。 如果一个串是正则表达式描述的正则集中的一员时, 那么就说这个串匹配该正则表达式。 POSIX正则表达式提供了比LIKE和SIMILAR TO操作符更强大的含义。表2列出了所有可用于POSIX正则表达式模式匹配的操作符。 表2 正则表达式匹配操作符 操作符 描述 例子 ~ 匹配正则表达式,大小写敏感 'thomas' ~ '.*thomas.*' ~* 匹配正则表达式,大小写不敏感 'thomas' ~* '.*Thomas.*' !~ 不匹配正则表达式,大小写敏感 'thomas' !~ '.*Thomas.*' !~* 不匹配正则表达式,大小写不敏感 'thomas' !~* '.*vadim.*' 匹配规则 与LIKE不同,正则表达式允许匹配串里的任何位置,除非该正则表达式显式地挂接在串的开头或者结尾。 除了上文提到的元字符外, POSIX正则表达式还支持下表的模式匹配元字符。 表3 模式匹配元字符 元字符 含义 ^ 表示串开头的匹配。 $ 表示串末尾的匹配。 . 匹配任意单个字符。 正则表达式函数 POSIX正则表达式支持下面函数。 substring(string from pattern)函数提供了抽取一个匹配POSIX正则表达式模式的子串的方法。 regexp_replace(string, pattern, replacement [,flags ])函数提供了将匹配POSIX正则表达式模式的子串替换为新文本的功能。 regexp_matches(string text, pattern text [, flags text])函数返回一个文本数组,该数组由匹配一个POSIX正则表达式模式得到的所有被捕获子串构成。 regexp_split_to_table(string text, pattern text [, flags text])函数把一个POSIX正则表达式模式当作一个定界符来分离一个串。 regexp_split_to_array(string text, pattern text [, flags text ])和regexp_split_to_table类似,是一个正则表达式分离函数,不过它的结果以一个text数组的形式返回。 正则表达式分离函数会忽略零长度的匹配,这种匹配发生在串的开头或结尾或者正好发生在前一个匹配之后。这和正则表达式匹配的严格定义是相悖的,后者由regexp_matches实现,但是通常前者是实际中最常用的行为。 示例 1 2 3 4 5 SELECT 'abc' ~ 'Abc' AS RESULT; result -------- f (1 row) 1 2 3 4 5 SELECT 'abc' ~* 'Abc' AS RESULT; result -------- t (1 row) 1 2 3 4 5 SELECT 'abc' !~ 'Abc' AS RESULT; result -------- t (1 row) 1 2 3 4 5 SELECT 'abc'!~* 'Abc' AS RESULT; result -------- f (1 row) 1 2 3 4 5 SELECT 'abc' ~ '^a' AS RESULT; result -------- t (1 row) 1 2 3 4 5 SELECT 'abc' ~ '(b|d)'AS RESULT; result -------- t (1 row) 1 2 3 4 5 SELECT 'abc' ~ '^(b|c)'AS RESULT; result -------- f (1 row) 虽然大部分的正则表达式搜索都能很快地执行,但是正则表达式仍可能被人为地控制,通过任意长的时间和任意量的内存进行处理。不建议从非安全模式来源接受正则表达式搜索模式,如果必须这样做,建议加上语句超时限制。使用SIMILAR TO模式的搜索具有同样的安全性危险, 因为SIMILAR TO提供了很多和POSIX-风格正则表达式相同的能力。LIKE搜索比其他两种选项简单得多,因此在接受非安全模式来源搜索时要更安全些。
  • LIKE 判断字符串是否能匹配上LIKE后的模式字符串。如果字符串与提供的模式匹配,则LIKE表达式返回为真(NOT LIKE表达式返回假),否则返回为假(NOT LIKE表达式返回真)。 匹配规则 此操作符只有在它的模式匹配整个串的时候才能成功。如果要匹配在串内任何位置的序列,该模式必须以百分号开头和结尾。 下划线 (_)代表(匹配)任何单个字符; 百分号(%)代表任意串的通配符。 要匹配文本里的下划线(_)或者百分号(%),在提供的模式里相应字符必须前导逃逸字符。逃逸字符的作用是禁用元字符的特殊含义,缺省的逃逸字符是反斜线,也可以用ESCAPE子句指定一个不同的逃逸字符。 要匹配逃逸字符本身,需写两个逃逸字符。例如要写一个包含反斜线的模式常量,那就要在SQL语句里写两个反斜线。 参数standard_conforming_strings设置为off时,在文串常量中写的任何反斜线都需要被双写。因此写一个匹配单个反斜线的模式实际上要在语句里写四个反斜线。可通过用ESCAPE选择一个不同的逃逸字符来避免这种情况,这样反斜线就不再是LIKE的特殊字符了。但仍然是字符文本分析器的特殊字符,所以还是需要两个反斜线。也可通过写ESCAPE ''的方式不选择逃逸字符,这样可以有效地禁用逃逸机制,但是没有办法关闭下划线和百分号在模式中的特殊含义。 关键字ILIKE可以用于替换LIKE,区别是LIKE大小写敏感,ILIKE大小写不敏感。 操作符~~等效于LIKE,操作符~~*等效于ILIKE。 示例 1 2 3 4 5 SELECT 'abc' LIKE 'abc' AS RESULT; result ----------- t (1 row) 1 2 3 4 5 SELECT 'abc' LIKE 'a%' AS RESULT; result ----------- t (1 row) 1 2 3 4 5 SELECT 'abc' LIKE '_b_' AS RESULT; result ----------- t (1 row) 1 2 3 4 5 SELECT 'abc' LIKE 'c' AS RESULT; result ----------- f (1 row)
  • mask_partial(column_name, mask_field1, mask_value1, mask_field2, mask_value2, mask_field3, mask_value3) 描述:按指定三个时间域做部分脱敏,仅适用于日期或时间类型数据。若mask_value取-1,即此mask_field不脱敏。其中,mask_field可以取"month"、"day"、"year"、"hour"、"minute"、"second"六个时间域之一。各域的取值范围需满足实际时间单位的取值范围。 返回值类型:与入参column_name数据类型相同。
  • 自定义脱敏函数 支持用户使用PL/PGSQL语言自定义脱敏函数。 自定义脱敏函数需要严格遵循如下要求: 返回值与脱敏列类型一致。 函数必须可下推。 参数列表除脱敏格式外,只能包含一个脱敏列。 函数仅实现针对特定数据类型的格式化改写功能,不能涉及与其他表对象的复杂关联操作。 不满足前两项中任一项时,创建脱敏策略会报错。不满足后两项中任一项时,可成功创建脱敏策略,但查询执行结果可能会出现不可预知的问题。
  • mask_partial(column_name [, input_format, output_format], mask_char, mask_from[, mask_to]) 描述:针对字符类型数据,对照指定的输入输出格式,将第mask_from到mask_to位的数字部分脱敏成mask_char指定的字符。 参数说明: input_format 输入格式是由V和F组成的字符序列,与脱敏列数据长度相同。V对应位置的字符可能会被脱敏,F对象位置的字符会被忽略跳过,V字符序列标识脱敏范围。输入输出格式参数适用于定长数据,比如,银行卡号、身份证号、手机号等。 output_format 输出格式是由V和其他任意字符组成的字符序列,与脱敏列数据长度相同。V字符位置与input_format的V位置对应,其他字符位置与input_format的F位置对应,且不会脱敏,通常为数据分隔符。 input_format和output_format可以缺省或指定为空串"",此时,无输入输出格式要求,原始字符序列范围即为脱敏范围。 mask_char 脱敏字符,仅允许长度为1的任意字符。场景的脱敏字符包括"*","#"等。 mask_from 脱敏范围的起始位置,要求大于0。 mask_to 脱敏范围的结束位置,允许缺省。缺省时,即脱敏到原始数据结束位置。 返回值类型:与入参column_name数据类型相同。
  • mask_partial(column_name, mask_digital, mask_from[, mask_to]) 描述:针对数值类型数据,将第mask_from到mask_to位的数字部分脱敏成mask_digital对应的数字。其中,参数mask_to允许缺省,缺省时即脱敏到数据结束位置。参数mask_digital只能取[0,9]区间内的数字。 返回值类型:与入参column_name数据类型相同。
  • 时间段输入 reltime的输入方式可以采用任何合法的时间段文本格式,包括数字形式(含负数和小数)及时间形式,其中时间形式的输入支持SQL标准格式、ISO-8601格式、POSTGRES格式等。另外,文本输入需要加单引号。 时间段输入的详细信息请参考表6 时间段输入。 表6 时间段输入 输入示例 输出结果 描述 60 2 mons 采用数字表示时间段,默认单位是day,可以是小数或负数。特别的,负数时间段,在语义上,可以理解为“早于多久”。 31.25 1 mons 1 days 06:00:00 -365 -12 mons -5 days 1 years 1 mons 8 days 12:00:00 1 years 1 mons 8 days 12:00:00 采用POSTGRES格式表示时间段,可以正负混用,不区分大小写,输出结果为将输入时间段计算并转换得到的简化POSTGRES格式时间段。 -13 months -10 hours -1 years -25 days -04:00:00 -2 YEARS +5 MONTHS 10 DAYS -1 years -6 mons -25 days -06:00:00 P-1.1Y10M -3 mons -5 days -06:00:00 采用ISO-8601格式表示时间段,可以正负混用,不区分大小写,输出结果为将输入时间段计算并转换得到的简化POSTGRES格式时间段。 -12H -12:00:00 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 --创建表。 CREATE TABLE reltime_type_tab(col1 character(30), col2 reltime); --插入数据。 INSERT INTO reltime_type_tab VALUES ('90', '90'); INSERT INTO reltime_type_tab VALUES ('-366', '-366'); INSERT INTO reltime_type_tab VALUES ('1975.25', '1975.25'); INSERT INTO reltime_type_tab VALUES ('-2 YEARS +5 MONTHS 10 DAYS', '-2 YEARS +5 MONTHS 10 DAYS'); INSERT INTO reltime_type_tab VALUES ('30 DAYS 12:00:00', '30 DAYS 12:00:00'); INSERT INTO reltime_type_tab VALUES ('P-1.1Y10M', 'P-1.1Y10M'); --查看数据。 SELECT * FROM reltime_type_tab; col1 | col2 --------------------------------+------------------------------------- 1975.25 | 5 years 4 mons 29 days -2 YEARS +5 MONTHS 10 DAYS | -1 years -6 mons -25 days -06:00:00 P-1.1Y10M | -3 mons -5 days -06:00:00 -366 | -1 years -18:00:00 90 | 3 mons 30 DAYS 12:00:00 | 1 mon 12:00:00 (6 rows) --删除表。 DROP TABLE reltime_type_tab;
  • 特殊值 GaussDB(DWS)支持几个特殊值,在读取的时候将被转换成普通的日期/时间值,请参考表5。 表5 特殊值 输入字符串 适用类型 描述 epoch date,timestamp 1970-01-01 00:00:00+00 (Unix系统零时) infinity timestamp 比任何其他时间戳都晚 -infinity timestamp 比任何其他时间戳都早 now date,time,timestamp 当前事务的开始时间 today date,timestamp 今日午夜 tomorrow date,timestamp 明日午夜 yesterday date,timestamp 昨日午夜 allballs time 00:00:00.00 UTC
  • 日期输入 日期和时间的输入几乎可以是任何合理的格式,包括ISO-8601格式、SQL-兼容格式、传统POSTGRES格式或者其它的形式。系统支持按照日、月、年的顺序自定义日期输入。如果把DateStyle参数设置为MDY就按照“月-日-年”解析,设置为DMY就按照“日-月-年”解析,设置为YMD就按照“年-月-日”解析。 日期的文本输入需要加单引号包围,语法如下: type [ ( p ) ] 'value' 可选的精度声明中的p是一个整数,表示在秒域中小数部分的位数。表2显示了date类型的输入方式。 表2 日期输入方式 例子 描述 1999-01-08 ISO 8601格式(建议格式),任何方式下都是1999年1月8号。 January 8, 1999 在任何datestyle输入模式下都无歧义。 1/8/1999 有歧义,在MDY模式下是一月八号,在DMY模式下是八月一号。 1/18/1999 MDY模式下是一月十八日,其它模式下被拒绝。 01/02/03 MDY模式下的2003年1月2日。 DMY模式下的2003年2月1日。 YMD模式下的2001年2月3日。 1999-Jan-08 任何模式下都是1月8日。 Jan-08-1999 任何模式下都是1月8日。 08-Jan-1999 任何模式下都是1月8日。 99-Jan-08 YMD模式下是1月8日,否则错误。 08-Jan-99 一月八日,除了在YMD模式下是错误的之外。 Jan-08-99 一月八日,除了在YMD模式下是错误的之外。 19990108 ISO 8601;任何模式下都是1999年1月8日。 990108 ISO 8601;任何模式下都是1999年1月8日。 1999.008 年和年里的第几天。 J2451187 儒略日。 January 8, 99 BC 公元前99年。 示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 --创建表。 CREATE TABLE date_type_tab(coll date); --插入数据。 INSERT INTO date_type_tab VALUES (date '12-10-2010'); --查看数据。 SELECT * FROM date_type_tab; coll --------------------- 2010-12-10 00:00:00 (1 row) --查看日期格式。 SHOW datestyle; DateStyle ----------- ISO, MDY (1 row) --设置日期格式。 SET datestyle='YMD'; SET --插入数据。 INSERT INTO date_type_tab VALUES(date '2010-12-11'); --查看数据。 SELECT * FROM date_type_tab; coll --------------------- 2010-12-10 00:00:00 2010-12-11 00:00:00 (2 rows) --删除表。 DROP TABLE date_type_tab;
  • 客户端差异 GaussDB(DWS) gsql相较于PostgreSQL psql做了如下安全加固变更: 取消通过元命令\password设置用户密码。 新增元命令\i+、 \ir+、\include_relative+和输入输出参数-k,以支持给导入导出的文件加密。 取消打印命令行历史到文件的元命令\s。 涉及敏感操作SQL历史不再记录,如含有密码操作。即用户通过翻页/上下键查阅SQL历史将不能查到对应的记录。 支持连接后在屏幕上给出用户密码过期提示以及版本信息。 gsql在psql基础上还增加了如下功能: 新增输出格式参数-r。支持用户输入命令时的tab补齐和方向键调整焦点。 新增并行操作元命令\parallel,以提升执行性能。 新增\set RETRY支持语句出错重试。 新增PLSQL默认结束符功能,将“/”作为PLSQL语句(create or replace function/procedure)的默认结束符,增加便利性。 libpq:
  • SQL差异 表1 GaussDB(DWS)不支持的PostgreSQL数据库语言 分类 GaussDB(DWS)不支持 说明 数据类型 几何类型line GaussDB(DWS)所支持的数据类型参见数据类型。 pg_node_tree 函数 枚举支持函数: enum_first(anyenum) enum_last(anyenum) enum_range(anyenum) enum_range(anyenum, anyenum) GaussDB(DWS)所支持的函数参见函数和操作符。 访问权限查询函数: has_sequence_privilege(user, sequence, privilege) has_sequence_privilege(sequence, privilege) 系统目录信息函数: pg_get_triggerdef(trigger_oid) pg_get_triggerdef(trigger_oid, pretty_bool) 几何类型转换函数: line(point, point) pg_node_tree函数 SQL语法 CREATE TABLE子句: INHERITS ( parent_table [, ... ] ) 继承表。 CREATE TABLE的列约束: REFERENCES reftable [ ( refcolumn ) ] [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ] [ ON DELETE action ] [ ON UPDATE action ] 列约束中用REFERENCES reftable [ ( refcolumn ) ] [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ] [ ON DELETE action ] [ ON UPDATE action ] 为表创建外键约束。 CREATE TABLE的表约束: EXCLUDE [ USING index_method ] ( exclude_element WITH operator [, ... ] ) 表约束中用EXCLUDE [ USING index_method ] ( exclude_element WITH operator [, ... ] )为表创建排除约束。 CREATE/ALTER/DROP EXTENSION 扩展的加载、修改和删除。 CREATE/ALTER/DROP AGGREGATE 聚集函数的定义、修改和删除。 CREATE/ALTER/DROP OPERATOR 操作符(OPERATOR)的创建、修改和删除。 CREATE/ALTER/DROP OPERATOR CLASS 操作符类(OPERATOR CLASS)的创建、修改和删除。 CREATE/ALTER/DROP OPERATOR FAMILY 操作符族(OPERATOR FAMILY)的创建、修改和删除。 CREATE/ALTER/DROP TEXT SEARCH PARSER 文本检索解析器(TEXT SEARCH PARSER)的创建、修改和删除。 CREATE/ALTER/DROP TEXT SEARCH TEMPLATE 文本检索模板(TEXT SEARCH TEMPLATE)的创建、修改和删除。 CREATE/ALTER/DROP COLLATION 排序规则(COLLATION)的创建、修改和删除 CREATE/ALTER/DROP CONVERSION 字符集编码转换(CONVERSION)的定义、修改和删除。 CREATE/ALTER/DROP RULE 规则(RULE)的创建、修改和删除。 CREATE/ALTER/DROP LANGUAGE 过程语言(LANGUAGE)的注册、修改和删除。 CREATE/ALTER/DROP DOMAIN 域(DOMAIN)的创建、修改和删除。 CREATE/DROP CAST 类型转换(CAST)的定义和删除。 CREATE/ALTER/DROP USER MAPPING 用户映射(USER MAPPING)的定义、修改和删除。 SECURITY LABEL 定义或更改对象的安全标签。 NOTIFY 生成一个通知。 LISTEN 监听一个通知。 UNLISTEN 停止监听通知信息。 LOAD 加载或重新加载一个共享库文件。 DISCARD 释放一个数据库的会话资源。(8.2.0及以上集群版本已支持DISCARD。) MOVE BACKWARD 反向移动游标。 COPY的COPY FROM FILE和COPY TO FILE 为了权限的隔离,GaussDB(DWS)禁用COPY FROM FILE和COPY TO FILE。 其他 自定义C函数 DWS支持的用户自定义函数参见用户自定义函数。
共100000条