400-800-0824
info@ymatrix.cn
400-800-0824
info@ymatrix.cn
400-800-0824
info@ymatrix.cn
400-800-0824
info@ymatrix.cn
400-800-0824
info@ymatrix.cn
YMatrix 文档
关于 YMatrix
标准集群部署
数据写入
数据迁移
数据查询
运维监控
参考指南
工具指南
数据类型
存储引擎
执行引擎
系统配置参数
SQL 参考
常见问题(FAQ)
定义访问权限。
GRANT { {SELECT | INSERT | UPDATE | DELETE | REFERENCES |
TRIGGER | TRUNCATE } [, ...] | ALL [PRIVILEGES] }
ON { [TABLE] table_name [, ...]
| ALL TABLES IN SCHEMA schema_name [, ...] }
TO { [ GROUP ] role_name | PUBLIC} [, ...] [ WITH GRANT OPTION ]
GRANT { { SELECT | INSERT | UPDATE | REFERENCES } ( column_name [, ...] )
[, ...] | ALL [ PRIVILEGES ] ( column_name [, ...] ) }
ON [ TABLE ] table_name [, ...]
TO { role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { {USAGE | SELECT | UPDATE} [, ...] | ALL [PRIVILEGES] }
ON { SEQUENCE sequence_name [, ...]
| ALL SEQUENCES IN SCHEMA schema_name [, ...] }
TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { {CREATE | CONNECT | TEMPORARY | TEMP} [, ...] | ALL
[PRIVILEGES] }
ON DATABASE database_name [, ...]
TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { USAGE | ALL [ PRIVILEGES ] }
ON DOMAIN domain_name [, ...]
TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { USAGE | ALL [ PRIVILEGES ] }
ON FOREIGN DATA WRAPPER fdw_name [, ...]
TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { USAGE | ALL [ PRIVILEGES ] }
ON FOREIGN SERVER server_name [, ...]
TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { EXECUTE | ALL [PRIVILEGES] }
ON { FUNCTION function_name ( [ [ argmode ] [ argname ] argtype [, ...]
] ) [, ...]
| ALL FUNCTIONS IN SCHEMA schema_name [, ...] }
TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { USAGE | ALL [PRIVILEGES] }
ON LANGUAGE lang_name [, ...]
TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { { CREATE | USAGE } [, ...] | ALL [PRIVILEGES] }
ON SCHEMA schema_name [, ...]
TO { [ GROUP ] role_name | PUBLIC} [, ...] [ WITH GRANT OPTION ]
GRANT { CREATE | ALL [PRIVILEGES] }
ON TABLESPACE tablespace_name [, ...]
TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { USAGE | ALL [ PRIVILEGES ] }
ON TYPE type_name [, ...]
TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT parent_role [, ...]
TO member_role [, ...] [WITH ADMIN OPTION]
GRANT { SELECT | INSERT | ALL [PRIVILEGES] }
ON PROTOCOL protocolname
TO username
YMatrix 数据库将用户和组的概念统一为一种称为角色的实体。 因此,不必使用关键字GROUP来标识被授予者是用户还是组。 命令中仍然允许使用GROUP,但这是一个干扰词。
GRANT命令具有两种基本变体: 一种对数据库对象(表,列,视图,外部表,序列,数据库,外部数据包装器,外部服务器,函数,过程语言,模式或表空间)授予特权, 以及授予一个角色中的成员关系。
GRANT命令的此变体将一个数据库对象的特定特权授予一个或多个角色。 这些特权将添加到已授予的特权(如果有)中。
还有一个选项可以授予一个或多个模式中所有相同类型的对象的特权。 当前仅表,序列和函数支持此功能(但请注意,ALL TABLES被视为包括视图和外部表)。
关键字PUBLIC表示将特权授予所有角色,包括以后可能创建的角色。 可以将PUBLIC视为始终包含所有角色的隐式定义的组级别角色。 任何特定角色将具有直接授予它的特权,授予它当前所属的任何角色的特权以及授予PUBLIC的特权的总和。
如果指定了WITH GRANT OPTION,则特权的接收者可以依次将其授予其他人。 没有grant option,接收者将无法做到这一点。 Grant options不能授予PUBLIC。
无需向对象的所有者(通常是创建该对象的角色)授予特权,因为所有者默认情况下具有所有特权。 (但是,所有者可以出于安全考虑选择撤销自己的某些特权。)
删除对象或以任何方式更改其定义的权利不视为可授予的特权;它是所有者固有的,不能被授予或撤销。 (但是,通过授予或撤消拥有对象的角色的成员资格,可以获得类似的效果;请参阅下文。) 所有者也隐式拥有该对象的所有授予选项。
YMatrix 数据库将某些类型的对象的默认特权授予PUBLIC。 默认情况下,不将在表,表列,序列,外部数据包装器,外部服务器,大型对象,模式或表空间上的权限授予PUBLIC。 对于其他类型的对象,授予PUBLIC的默认特权如下:
当然,对象所有者可以REVOKE默认特权和明确授予的特权。 (为了获得最大的安全性,请在创建对象的同一事务中执行REVOKE;因此,没有任何时间窗口可供其他用户使用该对象。)
GRANT命令的此变体将一个角色的成员资格授予一个或多个其他角色。 角色的成员资格意义重大,因为它可以将授予角色的特权传达给每个成员。
如果指定了WITH ADMIN OPTION,则成员可以依次将角色的成员资格授予其他人,也可以撤消该角色的成员资格。 没有admin选项,普通用户将无法做到这一点。 角色不被认为拥有WITH ADMIN OPTION本身,但是它可以从会话用户与角色匹配的数据库会话中授予或撤销成员资格。 数据库超级用户可以以任何角色向任何人授予或撤销成员资格。 具有CREATEROLE特权的角色可以授予或撤消不是超级用户的任何角色的成员资格。
与具有特权的情况不同,不能将角色的成员资格授予PUBLIC。
您还可以使用GRANT命令指定哪些用户可以访问受信任的协议。 (如果该协议不受信任,则您不能授予任何其他用户权限以使用它来读取或写入数据。)
要允许用户使用受信任的协议创建可读的外部表:
GRANT SELECT ON PROTOCOL protocolname TO username
要允许用户使用受信任的协议创建可写外部表:
GRANT INSERT ON PROTOCOL protocolname TO username
要允许用户使用受信任的协议创建可读和可写的外部表:
GRANT ALL ON PROTOCOL protocolname TO username
您还可以使用此命令来授予用户创建和使用s3和pxf外部表的权限。 但是,类型为http,https,gpfdist和gpfdists的外部表是在 YMatrix 数据库内部实现的,而不是作为自定义协议来实现的。 对于这些类型,请使用CREATE ROLE或ALTER ROLE命令为每个用户设置CREATEEXTTABLE或NOCREATEEXTTABLE属性。
SELECT
INSERT
UPDATE
DELETE
REFERENCES
TRIGGER
TRUNCATE
CREATE
CONNECT
TEMPORARY
TEMP
EXECUTE
USAGE
ALL PRIVILEGES
PUBLIC
WITH GRANT OPTION
WITH ADMIN OPTION
如果用户对特定列或整个表拥有该特权,则用户可以在该列上执行SELECT,INSERT等操作。 在表级别上授予特权,然后将其撤销一列,这并不像你预想的那样: 表级授予不受列级操作的影响。
数据库超级用户可以访问所有对象,而不管对象特权设置如何。 该对象的一个例外是视图对象。 对视图中引用的表的访问权限是由视图所有者(不是当前用户,即使当前用户是超级用户)的权限决定的。
如果超级用户选择执行GRANT或REVOKE命令,则该命令的执行就像是由受影响对象的所有者执行的一样。 特别是,通过此类命令授予的特权似乎已由对象所有者授予。 对于角色成员资格,成员资格似乎已由包含它的角色授予。
GRANT和REVOKE也可以由不是受影响对象的所有者完成,但要求是拥有该对象的角色的成员, 或者是拥有对该对象的WITH GRANT OPTION特权的角色的成员来完成。 在这种情况下,特权将被记录为已由实际拥有对象或拥有WITH GRANT OPTION特权的角色授予。
授予表权限不会自动将权限扩展到该表使用的任何序列,包括与SERIAL列绑定的序列。 序列的权限必须单独设置。
GRANT命令不能用于为协议file,gpfdist或gpfdists设置特权。 这些协议在 YMatrix 数据库内部实现。 而是使用CREATE ROLE或ALTER ROLE命令来设置角色的CREATEEXTTABLE属性。
使用psql的\dp元命令来获取有关表和列的现有特权的信息。 您还可以使用其他\d元命令来显示非表对象的特权。
向表mytable上的所有角色授予插入权限:
GRANT INSERT ON mytable TO PUBLIC;
将所有可用的特权授予在topten视图中的角色sally。 请注意,如果上述内容的确会由超级用户或topten的所有者执行, 将会授予所有特权,当由其他人执行时,它只会授予那些授予角色具有授予选项的那些权限。
GRANT ALL PRIVILEGES ON topten TO sally;
将角色admins的成员资格授予用户joe:
GRANT admins TO joe;
PRIVILEGES关键字在SQL标准中是必需的,但在 YMatrix 数据库中是可选的。 SQL标准不支持为每个命令在多个对象上设置特权。
YMatrix 数据库允许对象所有者撤消他们自己的普通特权: 例如,表所有者可以通过撤消其自己的INSERT,UPDATE,DELETE和TRUNCATE特权使该表对自己只读。 根据SQL标准,这是不可能的。 YMatrix 数据库将所有者的特权视为由所有者授予了所有者;因此他们也可以撤销它们。 在SQL标准中,所有者的特权由假定的system实体授予。
SQL标准为其他类型的对象提供USAGE特权:字符集,排序规则,翻译。
在SQL标准中,序列仅具有USAGE特权, 该特权控制NEXT VALUE FOR表达式的使用,该表达式等效于 YMatrix 数据库中的nextval函数。 序列特权SELECT和UPDATE是 YMatrix 数据库扩展。 对currval函数应用序列USAGE特权也是 YMatrix 数据库扩展(函数本身也是)。
数据库,表空间,模式和语言的特权是 YMatrix 数据库扩展。