华为云用户手册

  • has_any_column_privilege(user, table, privilege) 描述:指定用户是否有访问表任何列的权限。 参数:user可以通过名字(text类型)或OID来声明。table可以通过名字(text类型)或者OID来声明。privilege使用文本字符串(text类型)来声明,该文本字符串可取值SELECT、INSERT、UPDATE、REFEREN CES ,也可以用逗号分隔列出的多个权限类型。 返回类型:boolean
  • has_language_privilege(language, privilege) 描述:当前用户是否有访问语言的权限。 参数:language可以通过名字(text类型)或者OID来声明。privilege使用文本字符串来声明,该文本字符串必须是USAGE。 返回类型:boolean 备注:has_language_privilege检查用户是否能以特定方式访问过程语言。其参数类似has_table_privilege。访问权限类型必须是USAGE。
  • has_table_privilege(user, table, privilege) 描述:指定用户是否有访问表的权限。 参数:user可以通过名字(text类型)或OID来声明。table可以通过名字(text类型)或者OID来声明。privilege使用文本字符串来声明,该文本字符串可取值SELECT、INSERT、UPDATE、DELETE、TRUNCATE、REFERENCES或TRIGGER,也可以用逗号分隔列出的多个权限类型。 返回类型:boolean
  • 注意事项 只有表对象的属主具有创建脱敏策略的权限。 仅支持在普通表创建数据脱敏策略,不支持为系统表、HDFS表、外表、临时表、UN LOG GED表以及视图和函数对象创建脱敏策略。 不支持通过同义词向普通表对象创建脱敏策略。 表对象与脱敏策略间一一对应。一个脱敏策略是表对象所有脱敏列的集合,可以给脱敏表对象的多个列字段指定脱敏函数,且不同脱敏列对象可以采用不同的脱敏函数。 创建脱敏策略时,默认策略生效,即属性enable值为true。 具有sysadmin权限的用户,可跳过脱敏策略检查,对脱敏列数据一直具有可见性,即脱敏策略不生效。 支持通过指定角色匹配脱敏策略。
  • 示例 对指定用户创建脱敏策略。 创建用户alice和matu: 1 2 CREATE ROLE alice PASSWORD '{Password}'; CREATE ROLE matu PASSWORD '{Password}'; 用户alice创建表对象emp并插入数据: 1 2 CREATE TABLE emp(id int, name varchar(20), salary NUMERIC(10,2)); INSERT INTO emp VALUES(1, 'July', 1230.10), (2, 'David', 999.99); 用户alice为表对象emp创建脱敏策略mask_emp,字段salary对用户matu不可见: 1 CREATE REDACTION POLICY mask_emp ON emp WHEN(current_user = 'matu') ADD COLUMN salary WITH mask_full(salary); 用户alice授予用户matu表emp的SELECT权限: 1 GRANT SELECT ON emp TO matu; 切至用户matu: 1 SET ROLE matu PASSWORD '{Password}'; 查询表emp,字段salary数据已脱敏: 1 SELECT * FROM emp; 对角色创建脱敏策略。 创建角色redact_role: 1 CREATE ROLE redact_role PASSWORD '{Password}'; 将用户matu,alice加入角色redact_role: 1 GRANT redact_role to matu,alice; 管理员用户创建表对象emp1并插入数据: 1 2 CREATE TABLE emp1(id int, name varchar(20), salary NUMERIC(10,2)); INSERT INTO emp1 VALUES(3, 'Rose', 2230.20), (4, 'Jack', 899.88); 管理员用户为表对象emp1创建脱敏策略mask_emp1,使字段salary对角色redact_role不可见。 1 CREATE REDACTION POLICY mask_emp1 ON emp1 WHEN(pg_has_role(current_user, 'redact_role', 'member')) ADD COLUMN salary WITH mask_full(salary); 若不指定用户,默认为当前用户current_user: 1 CREATE REDACTION POLICY mask_emp1 ON emp1 WHEN (pg_has_role('redact_role', 'member')) ADD COLUMN salary WITH mask_full(salary); 管理员用户授予用户matu表emp1的SELECT权限: 1 GRANT SELECT ON emp1 TO matu; 切换至用户matu: 1 SET ROLE matu PASSWORD '{Password}'; 查询表emp1,字段salary数据已脱敏。 1 SELECT * FROM emp1;
  • obj_description(object_oid, catalog_name) 描述:获取一个数据库对象的注释。 返回类型:text 备注:带有两个参数的obj_description返回一个数据库对象的注释,该对象是通过其OID和其所属的系统表名字声明。比如,obj_description(123456,'pg_class')将返回OID为123456的表的注释。只带一个参数的obj_description只要求对象OID。 obj_description不能用于表字段,因为字段没有自己的OID。
  • 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/UNLOGGED TABLE table_name …语法中分区表不支持TEMPORARY或UNLOGGED属性。 解决办法:CREATE TEMPORARY/UNLOGGED TABLE table_name …语法中指定为TEMPORARY或UNLOGGED属性的表不支持分区表,请修改表名为非分区表。 父主题: GAUSS-00301 -- GAUSS-00400
  • GAUSS-00781 -- GAUSS-00790 GAUSS-00781: "cannot alter data type of distribute column" SQLSTATE: 0A000 错误原因:ALTER COLUMN TYPE操作,不能修改表的分布列的类型。 解决办法:不能更改类型表的列类型,建议更改本操作。 GAUSS-00782: "cannot refer to other columns in transform expression for column store table" SQLSTATE: 0A000 错误原因:列存表不支持在类型改变时更新数据引用其它列的值。 解决办法:避免列类型修改操作,通过新建表来达到同样目的。 GAUSS-00783: "transform expression must not return a set" SQLSTATE: 42804 错误原因:ALTER COLUMN TYPE操作,转换表达式不能返回集合。 解决办法:转换表达式不能返回集合,建议更改本操作。 GAUSS-00784: "cannot use subquery in transform expression" SQLSTATE: 0A000 错误原因:ALTER COLUMN TYPE操作,转换表达式不能包含子查询。 解决办法:转换表达式不能包含子查询,建议更改本操作。 GAUSS-00785: "cannot use aggregate function in transform expression" SQLSTATE: 42803 错误原因:ALTER COLUMN TYPE操作,转换表达式不能使用聚合函数。 解决办法:转换表达式不支持聚合函数,建议更改本操作。 GAUSS-00786: "cannot use window function in transform expression" SQLSTATE: 42P20 错误原因:ALTER COLUMN TYPE操作,转换表达式不能使用window函数。 解决办法:转换表达式不支持window函数,建议更改本操作。 GAUSS-00787: "column '%s' cannot be cast automatically to type %s" SQLSTATE: 42804 错误原因:ALTER COLUMN TYPE操作,列不能自动转化为某类型。 解决办法:建议指定列转换类型。 GAUSS-00788: "type of inherited column '%s' must be changed in child tables too" SQLSTATE: 42P16 错误原因:ALTER COLUMN TYPE操作,当parent table列的类型改变时,child table列类型也要随之改变。 解决办法:建议语句中指明子表随父表的变化递归变化。 GAUSS-00789: "cannot alter data type of partitioning column '%s'" SQLSTATE: 0A000 错误原因:ALTER COLUMN TYPE操作,不能更改分区表的列类型。 解决办法:分区表不支持更改列类型,建议更改本操作。 GAUSS-00790: "cannot alter type of column '%s' twice" SQLSTATE: 0A000 错误原因:ALTER COLUMN TYPE操作,不能同时两次更改某一列类型。 解决办法:不支持同时两次更改列类型,建议更改本操作。 父主题: GAUSS-00701 -- GAUSS-00800
  • 示例 修改用户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 | REFERENCES | 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;
  • 语法格式 修改角色的权限。 1 ALTER ROLE role_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' | [ ENCRYPTED | UNENCRYPTED ] IDENTIFIED BY 'password' [ REPLACE 'old_password' ] | [ 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' | NODE GROUP logic_cluster_name | ACCOUNT { LOCK | UNLOCK } | PGUSER | AUTHINFO 'authinfo' | PASSWORD EXPIRATION period 修改角色的名字。 1 2 ALTER ROLE role_name RENAME TO new_name; 设置角色的配置参数。 1 2 ALTER ROLE role_name [ IN DATABASE database_name ] SET configuration_parameter {{ TO | = } { value | DEFAULT } | FROM CURRENT}; 重置角色的配置参数。 1 2 ALTER ROLE role_name [ IN DATABASE database_name ] RESET {configuration_parameter|ALL};
  • 注意事项 只有表对象的属主具有创建脱敏策略的权限。 仅支持在普通表创建数据脱敏策略,不支持为系统表、HDFS表、外表、临时表、UNLOGGED表以及视图和函数对象创建脱敏策略。 不支持通过同义词向普通表对象创建脱敏策略。 表对象与脱敏策略间一一对应。一个脱敏策略是表对象所有脱敏列的集合,可以给脱敏表对象的多个列字段指定脱敏函数,且不同脱敏列对象可以采用不同的脱敏函数。 创建脱敏策略时,默认策略生效,即属性enable值为true。 具有sysadmin权限的用户,可跳过脱敏策略检查,对脱敏列数据一直具有可见性,即脱敏策略不生效。 支持通过指定角色匹配脱敏策略。
  • 语法格式 1 2 3 4 CREATE REDACTION POLICY policy_name ON table_name [INHERIT] [ WHEN (when_expression) ] [ ADD COLUMN column_name WITH redaction_function_name ( [ argument [, ...] ] )] [, ... ];
  • 示例 对指定用户创建脱敏策略。 创建用户alice和matu: 1 2 CREATE ROLE alice PASSWORD '{password}'; CREATE ROLE matu PASSWORD '{password}'; 用户alice创建表对象emp并插入数据: 1 2 CREATE TABLE emp(id int, name varchar(20), salary NUMERIC(10,2)); INSERT INTO emp VALUES(1, 'July', 1230.10), (2, 'David', 999.99); 用户alice为表对象emp创建脱敏策略mask_emp,字段salary对用户matu不可见: 1 CREATE REDACTION POLICY mask_emp ON emp WHEN(current_user = 'matu') ADD COLUMN salary WITH mask_full(salary); 用户alice授予用户matu表emp的SELECT权限: 1 GRANT SELECT ON emp TO matu; 切至用户matu: 1 SET ROLE matu PASSWORD '{password}'; 查询表emp,字段salary数据已脱敏: 1 SELECT * FROM emp; 对角色创建脱敏策略。 创建角色redact_role: 1 CREATE ROLE redact_role PASSWORD '{password}'; 将用户matu,alice加入角色redact_role: 1 GRANT redact_role to matu,alice; 管理员用户创建表对象emp1并插入数据: 1 2 CREATE TABLE emp1(id int, name varchar(20), salary NUMERIC(10,2)); INSERT INTO emp1 VALUES(3, 'Rose', 2230.20), (4, 'Jack', 899.88); 管理员用户为表对象emp1创建脱敏策略mask_emp1,使字段salary对角色redact_role不可见。 1 CREATE REDACTION POLICY mask_emp1 ON emp1 WHEN(pg_has_role(current_user, 'redact_role', 'member')) ADD COLUMN salary WITH mask_full(salary); 若不指定用户,默认为当前用户current_user: 1 CREATE REDACTION POLICY mask_emp1 ON emp1 WHEN (pg_has_role('redact_role', 'member')) ADD COLUMN salary WITH mask_full(salary); 管理员用户授予用户matu表emp1的SELECT权限: 1 GRANT SELECT ON emp1 TO matu; 切换至用户matu: 1 SET ROLE matu PASSWORD '{password}'; 查询表emp,字段salary数据已脱敏。 1 SELECT * FROM emp1;
  • 语法格式 1 CREATE USER user_name [ [ WITH ] option [ ... ] ] [ ENCRYPTED | UNENCRYPTED ] { PASSWORD | IDENTIFIED BY } { 'password' | DISABLE }; 其中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 26 27 28 29 30 31 {SYSADMIN | NOSYSADMIN} | {AUDITADMIN | NOAUDITADMIN} | {CREATEDB | NOCREATEDB} | {USEFT | NOUSEFT} | {CREATEROLE | NOCREATEROLE} | {INHERIT | NOINHERIT} | {LOGIN | NOLOGIN} | {REPLICATION | NOREPLICATION} | {INDEPENDENT | NOINDEPENDENT} | {VCADMIN | NOVCADMIN} | CONNECTION LIMIT connlimit | 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 | IN ROLE role_name [, ...] | IN GROUP role_name [, ...] | ROLE role_name [, ...] | ADMIN role_name [, ...] | USER role_name [, ...] | SYSID uid | DEFAULT TABLESPACE tablespace_name | PROFILE DEFAULT | PROFILE profile_name | PGUSER | AUTHINFO 'authinfo' | PASSWORD EXPIRATION period
  • 注意事项 通过CREATE USER创建的用户,默认具有LOGIN权限; 通过CREATE USER创建用户的同时系统会在执行该命令的数据库中,为该用户创建一个同名的SCHEMA;其他数据库中,则不自动创建同名的SCHEMA;用户可使用CREATE SCHEMA命令,分别在其他数据库中,为该用户创建同名SCHEMA。 系统管理员在普通用户同名schema下创建的对象,所有者为schema的同名用户(非系统管理员)。 除系统管理员之外,其他用户即使被授权了schema的所有权限也无法在普通用户的同名schema下创建对象,除非把同名schema相关的角色权限赋予其他用户。具体操作可参考“赋予用户schema的all权限后建表仍然报错”章节。
  • 示例 将系统权限授权给用户或者角色。 将sysadmin所有可用权限授权给joe用户: 1 GRANT ALL PRIVILEGES TO joe; 授权成功后,用户joe会拥有sysadmin的所有权限。 将对象权限授权给用户或者角色。 将表tpcds.reason的SELECT权限授权给用户joe: 1 GRANT SELECT ON TABLE tpcds.reason TO joe; 将表tpcds.reason的所有权限授权给用户kim: 1 GRANT ALL PRIVILEGES ON tpcds.reason TO kim; 授权成功后,kim用户就拥有了tpcds.reason表的所有权限,包括增删改查等权限。 将模式tpcds的使用权限授权给用户joe: 1 GRANT USAGE ON SCHEMA tpcds TO joe; 授权成功后,joe用户就拥有了模式schema的USAGE权限,允许访问包含在指定模式schema中的对象。 将tpcds.reason表中r_reason_sk、r_reason_id、r_reason_desc列的查询权限,r_reason_desc的更新权限授权给joe: 1 GRANT select (r_reason_sk,r_reason_id,r_reason_desc),update (r_reason_desc) ON tpcds.reason TO joe; 授权成功后,用户joe对tpcds.reason表中r_reason_sk,r_reason_id的查询权限会立即生效。 1 GRANT select (r_reason_sk, r_reason_id) ON tpcds.reason TO joe ; 将函数func_add_sql的EXECUTE权限授权给用户joe。 1 2 3 4 5 6 CREATE FUNCTION func_add_sql(f1 integer,f2 integer) RETURNS integer AS 'select $1 + $2;' LANGUAGE SQL IMMUTABLE RETURNS NULL ON NULL INPUT; GRANT EXECUTE ON FUNCTION func_add_sql(integer, integer) TO joe; 将序列serial的UPDATE权限授权给joe用户。 1 GRANT UPDATE ON SEQUENCE serial TO joe; 将数据库gaussdb的连接权限授权给用户joe,并给予其在gaussdb中创建schema的权限: 1 GRANT create,connect on database gaussdb TO joe ; 将模式tpcds的访问权限授权给角色tpcds_manager,并授予该角色在tpcds下创建对象的权限,不允许该角色中的用户将权限授权给其他人: 1 GRANT USAGE,CREATE ON SCHEMA tpcds TO tpcds_manager; 将用户或者角色的权限授权给其他用户或角色。 将用户joe的权限授权给用户manager,并允许该角色将权限授权给其他人: 1 GRANT joe TO manager WITH ADMIN OPTION; 将用户manager的权限授权给senior_manager用户: 1 GRANT manager TO senior_manager;
共100000条