华为云用户手册

  • DML语法 不支持PARTITION子句。 不支持UPDATE使用子查询。 不支持INSERT DELAYED Syntax。 不支持STRAIGHT_JOIN和NATURAL JOIN。 受限支持跨分片UPDATE多表需要join update的表需要有PK。 受限支持跨分片DELETE多表中的数据,需要Join delete的表需要有PK。 不支持SQL中对于变量的引用和操作。 例如: SET @c=1, @d=@c+1; SELECT @c, @d; INSERT或者UPDATE时,不支持插入或者更新拆分键值为DEFAULT关键字。 UPDATE不支持在一个语句中对同一字段重复更新。 UPDATE不支持关联更新拆分键。 UPDATE不支持自关联更新。 关联更新中,不支持在目标列的赋值语句或表达式中引用其它目标列,将造成更新结果不符合预期。 例如: update tbl_1 a,tbl_2 b set a.name=concat(b.name,'aaaa'),b.name=concat(a.name,'bbbb') on a.id=b.id; 当使用文本协议时,BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB数据必须转换成16进制数据。 DDM对非法数据的处理与后端MySQL的sql_mode有关。 关联更新不支持不带关联条件的Join。 SQL语句中表达式的因子数量请勿超过1000个。
  • 注释说明 单行注释 使用井号(#)开头,后面直接写注释内容。#后面的所有内容直到行尾都被视为注释。 示例如下: SELECT * FROM customers; #注释内容 使用两个连续的短划线(--),但这种注释要求第二个短划线后面至少有一个空格符,否则可能不会被正确解析。 示例如下: SELECT * FROM Product; -- 注释内容 多行注释 以/*开始并且以*/结束,可以包含多行文本。这种方式允许注释跨越多行。 示例如下: /* 注释内容 */ SELECT DISTINCT product_id, purchase_price FROM Product;
  • MySQL EXPLAIN 当您在需要执行的SQL语句前加上EXPLAIN,然后执行SQL时,您将会看到其具体的执行计划,以此分析耗时,进而修改SQL,达到优化的效果。 表1 EXPLAIN列的解释 列名称 描述 table 显示该行数据所归属的表。 type 显示连接使用了何种类型。连接类型按照执行速度从快到慢排序为:const、eq_reg、ref、range、index、ALL。 possible_keys 显示可能应用在该表中的索引。 key 实际使用的索引。如果为NULL,则没有使用索引。个别情况下,MySQL会选择优化不足的索引。在SELECT语句中使用USE INDEX(indexname)来强制使用一个索引或者用IGNORE INDEX(indexname)来强制MySQL忽略索引。 key_len 使用的索引的长度。在不损失精确性的情况下,长度越短越好。 ref 显示索引被使用的列,通常为一个常数。 rows MySQL用来返回请求数据的行数。 Extra 关于MySQL如何解析查询的额外信息。
  • 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中请求参数填写正确后重新发送请求。
  • 操作步骤 编辑获取用户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溢出问题。
  • 修订记录 表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 第一次正式发布。
  • Security Administrator权限说明 表1 Security Administrator权限说明 权限名称 所属区域 权限描述 Security Administrator 全局 IAM的管理员权限,可以对IAM执行所有操作,包括但不限于: 创建、修改、删除IAM用户。 创建、修改、删除用户组、给用户组授权。 创建、修改、删除自定义策略。 创建、修改项目。 创建、修改、删除委托。 创建、修改、删除身份提供商。 设置账号安全策略。
  • 获取方法 您是账号本身,需要为自己创建一个IAM用户,授予该用户Security Administrator权限后,调用获取用户Token接口即可获取具有Security Administrator权限的Token。 您是账号下的IAM用户,需要管理员给您授予Security Administrator权限后,才能获取具有Security Administrator权限Token,否则只能获取您自身已有权限的Token。
  • 升级华为账号后,还可以用原华为云账号登录吗 您已经注册过华为账号 如果华为账号与华为云账号信息(手机号码、邮件地址、账号名)一致,可继续使用原华为云账号登录;如果华为账号与华为云账号的部分信息不一致,就不能用原华为云不一致的信息登录(例如:手机号码相同,邮件地址不同时,不能用原华为云账号中的邮件地址登录)。 您从未注册过华为账号 升级后账号登录信息不变,您可继续用原手机号码、邮件地址、账号名登录。 父主题: 账号管理类
  • 临时安全凭证与永久安全凭证的差异 临时安全凭证存在有效期,可以在15分钟至24小时之间进行设置;永久安全凭证的有效期为永久,并且不能进行设置。 临时安全凭证没有数量限制;每个IAM用户最多可创建2个永久安全凭证。 临时安全凭证通过接口临时访问密钥AK/SK获取;永久安全凭证通过我的凭证界面控制台获取。 临时安全凭证为动态生成,即时使用,不能嵌入应用程序中,或者进行存储,到期后无法重复使用,只能重新获取。
  • 应用场景 RocketMQ业务迁移主要涉及以下场景: 将其他厂商的RocketMQ迁移到云上RocketMQ实例 将自建的RocketMQ迁移到云上RocketMQ实例 将云上一个RocketMQ实例迁移到云上另一个RocketMQ实例 迁移元数据时,主要提供以下两种迁移方法,请根据实际情况选择: 方法一:通过mqadmin命令导出源实例的元数据,然后在云上RocketMQ实例中创建迁移任务 方法二:导出源实例的Topic和消费组列表,然后通过脚本将Topic和消费组列表导入到云上RocketMQ实例中(适用于不支持通过mqadmin命令导出元数据的场景)
  • 前提条件 配置网络环境 分布式消息服务RocketMQ版实例分内网地址以及公网地址两种网络连接方式。如果使用公网地址,则消息生产与消费客户端需要有公网访问权限,并配置如下安全组。 表1 安全组规则 方向 协议 端口 源地址 说明 入方向 TCP 8200 0.0.0.0/0 公网访问元数据节点的端口 入方向 TCP 10100-10199 0.0.0.0/0 访问业务节点的端口 购买分布式消息服务RocketMQ版实例 具体请参考购买RocketMQ实例。 准备一台Linux系统的主机,在主机中安装Java Development Kit 1.8.111或以上版本,并完成环境变量配置。
  • 实施步骤(通过mqadmin命令导出源实例的元数据) 迁移元数据至分布式消息服务RocketMQ版实例。 获取其他厂商或自建RocketMQ实例的元数据。 登录主机,下载RocketMQ软件包。 wget https://archive.apache.org/dist/rocketmq/4.9.8/rocketmq-all-4.9.8-bin-release.zip 解压软件包。 unzip rocketmq-all-4.9.8-bin-release.zip (可选)如果RocketMQ实例开启了ACL访问控制,执行mqadmin命令时,需要鉴权。 切换到解压后的软件包目录下,在“conf/tools.yml”文件中,增加如下内容。 accessKey:******* secretKey:******* accessKey和secretKey表示在控制台“用户管理”页面,创建的用户名和密钥。 进入解压后的软件包目录下,执行以下命令,查询集群名称。 sh ./bin/mqadmin clusterList -n {nameserver地址及端口号} 例如:“nameserver地址及端口号”为“192.168.0.65:8100”。 sh ./bin/mqadmin clusterList -n 192.168.0.65:8100 执行以下命令,导出元数据。 未开启SSL的实例,执行以下命令。 sh ./bin/mqadmin exportMetadata -n {nameserver地址及端口号} -c {RocketMQ集群名称} -f {导出的元数据文件的存放路径} 例如:“nameserver地址及端口号”为“192.168.0.65:8100”,“RocketMQ集群名称”为“DmsCluster”,“导出的元数据文件的存放路径”为“/tmp/rocketmq/export”。 sh ./bin/mqadmin exportMetadata -n 192.168.0.65:8100 -c DmsCluster -f /tmp/rocketmq/export 已开启SSL的实例,执行以下命令。 JAVA_OPT=-Dtls.enable=true sh ./bin/mqadmin exportMetadata -n {nameserver地址及端口号} -c {RocketMQ集群名称} -f {导出的元数据文件的存放路径} 例如:“nameserver地址及端口号”为“192.168.0.65:8100”,“RocketMQ集群名称”为“DmsCluster”,“导出的元数据文件的存放路径”为“/tmp/rocketmq/export”。 JAVA_OPT=-Dtls.enable=true sh ./bin/mqadmin exportMetadata -n 192.168.0.65:8100 -c DmsCluster -f /tmp/rocketmq/export 在控制台迁移元数据。 登录分布式消息服务RocketMQ版控制台。 单击RocketMQ实例的名称,进入实例详情页面。 在左侧导航栏,选择“元数据迁移”,进入迁移任务列表页面。 单击“创建迁移任务”,弹出“创建迁移任务”对话框。 参考表2,设置迁移任务的参数。 表2 迁移任务参数说明 参数 说明 任务名称 您可以自定义迁移任务的名称,用于区分不同的迁移任务。 是否同名覆盖 如果开启同名覆盖,会对已有的同名元数据的配置进行修改。 例如:原实例Topic01的读队列个数为3,云上实例Topic01的读队列个数为2,开启同名覆盖后,云上实例Topic01的读队列个数变为3。 如果不开启同名覆盖,同名元数据的迁移将失败。 例如:原实例的Topic包含Topic01和Topic02,云上实例的Topic包含Topic01和Topic03,不开启同名覆盖,原实例Topic01的迁移将失败。 元数据 上传获取其他厂商或自建RocketMQ实例的元数据。 单击“确定”。 迁移完成后,在迁移任务列表页面查看“任务状态”。 当“任务状态”为“迁移完成”,表示所有元数据都已成功迁移。 当“任务状态”为“迁移失败”,表示元数据中部分或全部元数据迁移失败。单击迁移任务名称,进入迁移任务详情页,在“迁移结果”中查看迁移失败的Topic/消费组名称,以及失败原因。 迁移生产消息至分布式消息服务RocketMQ版实例。 将生产客户端的元数据连接地址改为分布式消息服务RocketMQ版实例的元数据连接地址,重启生产业务,使得生产者将新的消息发送到分布式消息服务RocketMQ版实例中。 迁移消费消息至分布式消息服务RocketMQ版实例。 待消费组中的消息消费完之后,将消费客户端的元数据连接地址改为分布式消息服务RocketMQ版实例的元数据连接地址,重启消费业务,使得消费者从分布式消息服务RocketMQ版实例中消费消息。 如果有多个RocketMQ实例需要迁移到同一个分布式消息服务RocketMQ版实例中,请依次进行迁移。
  • GAUSS-00351 -- GAUSS-00360 GAUSS-00351: "index '%s' contains expressions" SQLSTATE: 42809 错误原因:CREATE TABLE ... CONSTRAINT语法中对于创建分区表创建为主键约束或唯一(UNIQUE)约束的约束属性错误的包含表达式。 解决办法:CREATE TABLE ... CONSTRAINT语法中对于创建分区表创建为主键约束或唯一(UNIQUE)约束的约束属性不允许包含表达式。 GAUSS-00352: "'%s' is a partial index" SQLSTATE: 42809 错误原因:不支持的用法。 解决办法:用合法的索引代替。 GAUSS-00353: "'%s' is a deferrable index" SQLSTATE: 42809 错误原因:不支持的用法。 解决办法:用合法的索引代替。 GAUSS-00354: "index '%s' is not a btree" SQLSTATE: 42809 错误原因:btree函数中指定的索引不是B-tree索引。 解决办法:检查指定的索引类型,使用对应的索引函数。 GAUSS-00355: "index '%s' does not have default sorting behavior" SQLSTATE: 42809 错误原因:不支持的用法。 解决办法:用合法的索引代替。 GAUSS-00357: "column '%s' named in key does not exist" SQLSTATE: 42703 错误原因:CREATE TABLE语法中使用约束子句声明的表的字段名在表中不存在。 解决办法:请检查CREATE TABLE语法中使用约束子句声明的表的字段名是否在表中存在,如果不存在需要更换继承的字段名或重新创建表。 GAUSS-00358: "column '%s' appears twice in primary key constraint" SQLSTATE: 42701 错误原因:CREATE TABLE ... CONSTRAINT语法的PRIMARY KEY子句中指定的主键约束包含的约束属性中有2个相同的主键名。 解决办法:请检查CREATE TABLE ... CONSTRAINT语法的PRIMARY KEY子句中指定的主键约束包含的约束属性中是否存在2个相同的主键名,并修改或删除其中一个主键名。 GAUSS-00359: "column '%s' appears twice in unique constraint" SQLSTATE: 42701 错误原因:CREATE TABLE ... CONSTRAINT语法的UNIQE子句中指定的主键约束包含的约束属性中有2个相同的主键名。 解决办法:请检查CREATE TABLE ... CONSTRAINT语法的UNIQE子句中指定的主键约束包含的约束属性中是否存在2个相同的主键名,并修改或删除其中一个主键名。 GAUSS-00360: "access method 'psort' does not support row store" SQLSTATE: 0A000 错误原因:对行存表通过CREATE INDEX...USING method语法中指定的访问方法创建psort索引错误。 解决办法:对行存表创建索引时指定的访问方法不能为psort类型,psort类型为列存表创建索引的访问方法,请修改索引的访问方法。 父主题: GAUSS-00301 -- GAUSS-00400
  • GAUSS-00381 -- GAUSS-00390 GAUSS-00381: "misplaced INITIALLY DEFERRED clause" SQLSTATE: 42601 错误原因:语法错误。 解决办法:修改SQL Statement。 GAUSS-00382: "multiple INITIALLY IMMEDIATE/DEFERRED clauses not allowed" SQLSTATE: 42601 错误原因:语法错误。 解决办法:修改SQL Statement。 GAUSS-00383: "misplaced INITIALLY IMMEDIATE clause" SQLSTATE: 42601 错误原因:语法错误。 解决办法:修改SQL Statement。 GAUSS-00384: "CREATE specifies a schema (%s) different from the one being created (%s)" SQLSTATE: 42P15 错误原因:"在CREATE SCHEMA schema_name schema_element...语法中,schema_element指示的CREATE TABLE、CREATE VIEW、CREATE INDEX、CREATE PARTITION或GRANT子句中的包含的模式名与schema_name不匹配"。 解决办法:"在CREATE SCHEMA schema_name schema_element...语法中,需要确认并修改schema_element指示的CREATE TABLE、CREATE VIEW、CREATE INDEX、CREATE PARTITION或GRANT子句中的包含的模式名与schema_name一致。" GAUSS-00385: "unsupport inherits clause for partitioned table" SQLSTATE: 42601 错误原因:语法错误。 解决办法:修改SQL Statement。 GAUSS-00386: "inherited relation '%s' is a foreign table" SQLSTATE: 42809 错误原因:不支持的用法。 解决办法:修改SQL Statement。 GAUSS-00387: "inherited relation '%s' is a partitioned table" SQLSTATE: XX000 错误原因:"CREATE TABLE table_name (...) INHERITS ( parent_table [, ... ] )语法中parent_table为分区表"。 解决办法:"请检查CREATE TABLE table_name (...) INHERITS ( parent_table [, ... ] )语法中parent_table是否为分区表,语法要求继承的parent_table不能为分区表"。 GAUSS-00388: "ON COMMIT option is not supported for partitioned table" SQLSTATE: 42601 错误原因:CREATE TABLE table_name (...) ON COMMIT语法特性对分区表不支持。 解决办法:将CREATE TABLE table_name (...) ON COMMIT语法更换为其他方式,请参考《SQL语法参考》的“CREATE ROLE”章节。 GAUSS-00389: "Typed table can't not be partitioned" SQLSTATE: 42601 错误原因:CREATE … TABLE OF type_name …语法特性该版本暂不支持。 解决办法:请将CREATE … TABLE OF type_name …语法更换为其他方式。 GAUSS-00390: "unsupported feature with temporary/unlogged table for partitioned table" SQLSTATE:42601 错误原因:CREATE TEMPORARY/UN LOG GED TABLE table_name …语法中分区表不支持TEMPORARY或UNLOGGED属性。 解决办法:CREATE TEMPORARY/UNLOGGED TABLE table_name …语法中指定为TEMPORARY或UNLOGGED属性的表不支持分区表,请修改表名为非分区表。 父主题: GAUSS-00301 -- GAUSS-00400
  • 示例 修改用户jim的登录密码: 1 ALTER USER jim IDENTIFIED BY '{password}' REPLACE '{old_password}'; 为用户jim追加CREATEROLE权限: 1 ALTER USER jim CREATEROLE; 将与用户jim关联的会话参数enable_seqscan的值设置为on, 设置成功后,在下一会话中生效: 1 ALTER USER jim SET enable_seqscan TO on; 重置jim的enable_seqscan参数: 1 ALTER USER jim RESET enable_seqscan; 锁定jim账户: 1 ALTER USER jim ACCOUNT LOCK;
  • 语法格式 修改用户的权限等信息。 1 ALTER USER user_name [ [ WITH ] option [ ... ] ]; 其中option子句为。 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 { CREATEDB | NOCREATEDB } | { CREATEROLE | NOCREATEROLE } | { INHERIT | NOINHERIT } | { AUDITADMIN | NOAUDITADMIN } | { SYSADMIN | NOSYSADMIN } | { USEFT | NOUSEFT } | { LOGIN | NOLOGIN } | { REPLICATION | NOREPLICATION } | {INDEPENDENT | NOINDEPENDENT} | {VCADMIN | NOVCADMIN} | CONNECTION LIMIT connlimit | [ ENCRYPTED | UNENCRYPTED ] PASSWORD { 'password' | DISABLE } | [ ENCRYPTED | UNENCRYPTED ] IDENTIFIED BY { 'password' [ REPLACE 'old_password' ] | DISABLE } | VALID BEGIN 'timestamp' | VALID UNTIL 'timestamp' | RESOURCE POOL 'respool' | USER GROUP 'groupuser' | PERM SPACE 'spacelimit' | TEMP SPACE 'tmpspacelimit' | SPILL SPACE 'spillspacelimit' | NODE GROUP logic_cluster_name | ACCOUNT { LOCK | UNLOCK } | PGUSER | AUTHINFO 'authinfo' | PASSWORD EXPIRATION period 修改用户名。 1 2 ALTER USER user_name RENAME TO new_name; 修改与用户关联的指定会话参数值。 1 2 ALTER USER user_name SET configuration_parameter { { TO | = } { value | DEFAULT } | FROM CURRENT }; 重置与用户关联的指定会话参数值。 1 2 ALTER USER user_name RESET { configuration_parameter | ALL };
  • 参数说明 关键字PUBLIC表示一个隐式定义的拥有所有角色的组。 权限类别和参数说明,请参见GRANT的参数说明。 任何特定角色拥有的特权包括直接授予该角色的特权、从该角色作为其成员的角色中得到的权限以及授予给PUBLIC的权限。因此,从PUBLIC收回SELECT特权并不一定会意味着所有角色都会失去在该对象上的SELECT特权,那些直接被授予的或者通过另一个角色被授予的角色仍然会拥有它。类似地,从一个用户收回SELECT后,如果PUBLIC仍有SELECT权限,该用户还是可以使用SELECT。 指定GRANT OPTION FOR时,只撤销对该权限授权的权力,而不撤销该权限本身。 如用户A拥有某个表的UPDATE权限,及WITH GRANT OPTION选项,同时A把这个权限赋予了用户B,则用户B持有的权限称为依赖性权限。当用户A持有的权限或者授权选项被撤销时,依赖性权限仍然存在,但如果声明了CASCADE,则所有依赖性权限都被撤销。 一个用户只能撤销由它自己直接赋予的权限。例如,如果用户A被指定授权(WITH ADMIN OPTION)选项,且把一个权限赋予了用户B,然后用户B又赋予了用户C,则用户A不能直接将C的权限撤销。但是,用户A可以撤销用户B的授权选项,并且使用CASCADE。这样,用户C的权限就会自动被撤销。另外一个例子:如果A和B都赋予了C同样的权限,则A可以撤销他自己的授权选项,但是不能撤销B的,因此C仍然拥有该权限。 如果执行REVOKE的角色持有的权限是通过多层成员关系获得的,则具体是哪个包含的角色执行的该命令是不确定的。在这种场合下,最好的方法是使用SET ROLE成为特定角色,然后执行REVOKE,否则可能导致删除了不想删除的权限,或者是任何权限都没有删除。
  • 示例 撤销joe用户的所有权限: 1 REVOKE ALL PRIVILEGES FROM joe; 撤销指定模式上授予的权限: 1 REVOKE USAGE,CREATE ON SCHEMA tpcds FROM tpcds_manager; 撤销joe用户的CONNECT特权: 1 REVOKE CONNECT ON DATABASE mydatabase FROM joe; 从用户joe撤销角色 admins 中的成员资格: 1 REVOKE admins FROM joe; 撤销用户joe对视图 myView 具有的所有特权: 1 REVOKE ALL PRIVILEGES ON myView FROM joe; 撤销针对表customer_t1的public插入特权: 1 REVOKE INSERT ON customer_t1 FROM PUBLIC; 撤销用户joe对模式tpcds的使用权限: 1 REVOKE USAGE ON SCHEMA tpcds FROM joe; 撤销用户joe对tpcds.reason表中r_reason_sk,r_reason_id的查询权限: 1 REVOKE select (r_reason_sk, r_reason_id) ON tpcds.reason FROM joe; 撤销用户joe的函数权限: 1 REVOKE execute ON FUNCTION func_add_sql(integer, integer) FROM joe CASCADE;
  • 语法格式 撤销指定表和视图上权限。 1 2 3 4 5 6 7 REVOKE [ GRANT OPTION FOR ] { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFEREN CES | TRIGGER | ANALYZE | ANALYSE | VACUUM | ALTER | DROP }[, ...] | ALL [ PRIVILEGES ] } ON { [ TABLE ] table_name [, ...] | ALL TABLES IN SCHEMA schema_name [, ...] } FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]; 撤销表上指定字段权限。 1 2 3 4 5 6 REVOKE [ GRANT OPTION FOR ] { {{ SELECT | INSERT | UPDATE | REFERENCES } ( column_name [, ...] )}[, ...] | ALL [ PRIVILEGES ] ( column_name [, ...] ) } ON [ TABLE ] table_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]; 撤销指定数据库上权限。 1 2 3 4 5 6 REVOKE [ GRANT OPTION FOR ] { { CREATE | CONNECT | TEMPORARY | TEMP } [, ...] | ALL [ PRIVILEGES ] } ON DATABASE database_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]; 撤销指定函数上权限。 1 2 3 4 5 6 REVOKE [ GRANT OPTION FOR ] { EXECUTE | ALL [ PRIVILEGES ] } ON { FUNCTION {function_name ( [ {[ argmode ] [ arg_name ] arg_type} [, ...] ] )} [, ...] | ALL FUNCTIONS IN SCHEMA schema_name [, ...] } FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]; 撤销指定大对象上权限。 1 2 3 4 5 REVOKE [ GRANT OPTION FOR ] { { SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] } ON LARGE OBJECT loid [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]; 撤销指定序列上权限。 1 2 3 4 5 REVOKE [ GRANT OPTION FOR ] { { SELECT | UPDATE | USAGE } [, ...] | ALL [ PRIVILEGES ] } ON SEQUENCE sequence_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]; 撤销指定模式上权限。 1 2 3 4 5 REVOKE [ GRANT OPTION FOR ] { { CREATE | USAGE | ALTER | DROP } [, ...] | ALL [ PRIVILEGES ] } ON SCHEMA schema_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]; 撤销指定子集群上权限 1 2 3 4 5 REVOKE [ GRANT OPTION FOR ] { CREATE | USAGE | COMPUTE | ALL [ PRIVILEGES ] } ON NODE GROUP group_name [, ...] FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT ]; 按角色撤销角色上的权限。 1 2 3 REVOKE [ ADMIN OPTION FOR ] role_name [, ...] FROM role_name [, ...] [ CASCADE | RESTRICT ]; 撤销角色上的sysadmin权限。 1 REVOKE ALL { PRIVILEGES | PRIVILEGE } FROM role_name;
  • 注意事项 非对象所有者试图在对象上REVOKE权限,命令按照以下规则执行: 如果授权用户没有该对象上的权限,则命令立即失败。 如果授权用户有部分权限,则只撤销那些有授权选项的权限。 如果授权用户没有授权选项,REVOKE ALL PRIVILEGES形式将发出一个错误信息,而对于其他形式的命令而言,如果是命令中指定名字的权限没有相应的授权选项,该命令将发出一个警告。 不允许对表分区进行REVOKE操作,对分区表进行REVOKE操作会引起告警。
  • pg_has_role(role, privilege) 描述:当前用户是否有角色的权限。 返回类型:boolean 备注:pg_has_role检查用户是否能以特定方式访问角色。其参数类似has_table_privilege,除了public不能用做用户名。访问权限类型必须是MEMBER或USAGE的一些组合。 MEMBER表示的是角色中的直接或间接成员关系(也就是SET ROLE的权限),而USAGE表示无需通过SET ROLE也直接拥有角色的使用权限。
  • has_column_privilege(table, column, privilege) 描述:当前用户是否有访问列的权限。 返回类型:boolean 备注:has_column_privilege检查用户是否以特定方式访问一列。其参数类似于has_table_privilege,可以通过列名或属性号添加列。想要的访问权限类型必须是SELECT、INSERT、UPDATE或REFERENCES的一些组合。 拥有表的表级别权限则隐含的拥有该表每列的列级权限。
  • has_function_privilege(function, privilege) 描述:当前用户是否有访问函数的权限。 返回类型:boolean 备注:has_function_privilege检查一个用户是否能以指定方式访问函数。其参数类似has_table_privilege。使用文本字符而不是OID声明一个函数时,允许输入的类型和regprocedure数据类型一样(请参考对象标识符类型)。访问权限类型必须是EXECUTE。
  • has_any_column_privilege(table, privilege) 描述:当前用户是否有访问表任何列的权限。 返回类型:boolean 备注:has_any_column_privilege检查用户是否以特定方式访问表的任何列。其参数可能与has_table_privilege类似,除了访问权限类型必须是SELECT、INSERT、UPDATE或REFERENCES的一些组合。 拥有表的表级别权限则隐含的拥有该表每列的列级权限,因此如果与has_table_privilege参数相同,has_any_column_privilege总是返回true。但是如果授予至少一列的列级权限也返回成功。
  • has_table_privilege(table, privilege) 描述:当前用户是否有访问表的权限。 返回类型:boolean 备注:has_table_privilege检查用户是否以特定方式访问表。用户可以通过名字或OID(pg_authid.oid)来指定,public表明PUBLIC伪角色,如果缺省该参数,则使用current_user。该表可以通过名字或者OID声明。如果用名字声明,则在必要时可以用模式进行修饰。如果使用文本字符串来声明权限类型,该文本字符串必须是SELECT、INSERT、UPDATE、DELETE、TRUNCATE、REFERENCES或TRIGGER之一的值。可以给权限类型添加WITH GRANT OPTION,用来测试权限是否拥有授权选项。也可以用逗号分隔列出的多个权限类型,如果拥有任何所列出的权限,则结果便为true。 示例: 1 2 3 4 5 6 7 8 9 10 11 SELECT has_table_privilege('tpcds.web_site', 'select'); has_table_privilege --------------------- t (1 row) SELECT has_table_privilege('dbadmin', 'tpcds.web_site', 'select,INSERT WITH GRANT OPTION '); has_table_privilege --------------------- t (1 row)
  • has_database_privilege(database, privilege) 描述:当前用户是否有访问数据库的权限。 返回类型:boolean 备注:has_database_privilege检查用户是否能以在特定方式访问数据库。其参数类似has_table_privilege。访问权限类型必须是CREATE、CONNECT、TEMPORARY或TEMP(等价于TEMPORARY)的一些组合。
  • 参数说明 role_name 现有角色名。 取值范围:已存在的用户名。 IN DATABASE database_name 表示修改角色在指定数据库上的参数。 SET configuration_parameter 设置角色的参数。ALTER ROLE中修改的会话参数只针对指定的角色,且在下一次该角色启动的会话中有效。 取值范围: configuration_parameter和value的取值请参见SET。 DEFAULT:表示清除configuration_parameter参数的值,configuration_parameter参数的值将继承本角色新产生的SESSION的默认值。 FROM CURRENT:取当前会话中的值设置为configuration_parameter参数的值。 RESET configuration_parameter/ALL 清除configuration_parameter参数的值。与SET configuration_parameter TO DEFAULT的效果相同。 取值范围:ALL表示清除所有参数的值。 ACCOUNT LOCK | ACCOUNT UNLOCK ACCOUNT LOCK:锁定账户,禁止登录数据库。 ACCOUNT UNLOCK:解锁账户,允许登录数据库。 PGUSER 当前版本不允许修改角色的PGUSER属性 其他参数请参见CREATE ROLE的参数说明。
  • 示例 修改角色manager的密码 1 ALTER ROLE manager IDENTIFIED BY '{password}' REPLACE '{old_password}'; 修改角色manager为系统管理员: 1 ALTER ROLE manager SYSADMIN; 修改LDAP认证角色的fulluser信息: 1 ALTER ROLE role2 WITH LOGIN AUTHINFO 'ldapcn=role2,cn=user2,dc=func,dc=com' PASSWORD DISABLE; 修改角色的登录密码有效期为90天: 1 ALTER ROLE role3 PASSWORD EXPIRATION 90;
共100000条