第二章 SQL命令参考-GRANT

来源:互联网 发布:损坏文件修复软件 编辑:程序博客网 时间:2024/06/07 09:30

GRANT

Defines accessprivileges.

概要


 


|

GRANT{ {SELECT | INSERT | UPDATE | DELETE | REFERENCES |

TRIGGER| TRUNCATE } [,...] | ALL [PRIVILEGES] }

ON[TABLE] tablename [, ...]

TO {rolename| PUBLIC} [, ...] [WITH GRANT OPTION]

GRANT{ {USAGE | SELECT | UPDATE} [,...] | ALL [PRIVILEGES] }

ONSEQUENCE sequencename [, ...]

TO {rolename | PUBLIC } [, ...] [WITH GRANT OPTION]

GRANT{ {CREATE | CONNECT | TEMPORARY | TEMP} [,...] | ALL

[PRIVILEGES]}

ONDATABASE dbname [, ...]

TO {rolename| PUBLIC} [, ...] [WITH GRANT OPTION]

GRANT{ EXECUTE | ALL [PRIVILEGES] }

ONFUNCTION funcname ( [ [argmode] [argname] argtype[, ...]

] ) [,...]

TO {rolename| PUBLIC} [, ...] [WITH GRANT OPTION]

GRANT{ USAGE | ALL [PRIVILEGES] }

ONLANGUAGE langname [, ...]

TO {rolename| PUBLIC} [, ...] [WITH GRANT OPTION]

GRANT{ {CREATE | USAGE} [,...] | ALL [PRIVILEGES] }

ONSCHEMA schemaname [, ...]

TO {rolename| PUBLIC} [, ...] [WITH GRANT OPTION]

GRANT{ CREATE | ALL [PRIVILEGES] }

ONTABLESPACE tablespacename [, ...]

TO {rolename| PUBLIC} [, ...] [WITH GRANT OPTION]

GRANTparent_role [, ...]

TOmember_role [, ...] [WITH ADMIN OPTION]

GRANT{ SELECT | INSERT | ALL [PRIVILEGES] }

ONPROTOCOL protocolname

TOusername

 

 

 

 

描述

GRANT命令有两个基本变体:一个授予数据库对象(表,视图,序列,数据库,函数,过程语言,模式或表空间)的权限,以及授予角色成员身份的权限。

数据库对象上的GRANT

GRANT命令的这个变体给出一个或多个角色的数据库对象的特定权限。这些权限将被添加到已经授予的权限(如果有的话)。

关键字PUBLIC表示将授予所有角色的权限,包括稍后可能创建的角色。 PUBLIC可能被认为是一个隐含定义的组级角色,始终包含所有角色。任何特定角色将具有直接授予的特权,授予其目前为其成员的任何角色的特权以及授予PUBLIC的特权。

如果指定了WITH GRANT OPTION,则该权限的收件人可能会将其授予其他人。没有授权选项,收件人不能这样做。拨款选项不能授予PUBLIC。

没有必要向对象的所有者(通常是创建它的角色)授予权限,因为所有者默认情况下具有所有权限。放弃对象或以任何方式更改其定义的权利不被授予的权限描述;所有者是固有的,不能被授予或撤销。所有者隐含地还包含对象的所有授权选项。

根据对象的类型,初始默认权限可能包括向PUBLIC授予一些权限。对于表,模式和表空间,默认值不是公共访问;数据库的CONNECT特权和TEMP表创建特权; EXECUTE功能特权;和USAGE语言特权。对象所有者当然可以撤销这些权限。

授予角色

GRANT命令的这个变体将角色的成员资格授予一个或多个其他角色。成员身份是重要的,因为它向每个成员传达了角色授予的特权。

如果指定WITH ADMIN OPTION,则成员可能会将角色的成员资格授予他人,并撤销该角色的成员身份。数据库超级用户可以向任何人授予或撤销任何角色的会员资格。具有CREATEROLE权限的角色可以授予或撤销不是超级用户的任何角色的成员资格。

与具有特权的情况不同,不能将角色的成员资格授予PUBLIC。

授权协议

创建自定义协议后,请指定CREATE TRUSTEDPROTOCOL以允许除拥有者之外的任何用户访问它。如果协议不受信任,您不能授予任何其他用户使用它来读取或写入数据的权限。创建TRUSTED协议后,您可以使用GRANT命令指定哪些其他用户可以访问它。

•允许用户使用可信协议创建可读外部表

GRANT SELECT ON PROTOCOL protocolname TOusername

•允许用户创建具有可信协议的可写外部表

GRANT INSERT ON PROTOCOL protocolname TOusername

•允许用户使用可信协议创建可读写的外部表

GRANT ALL ON PROTOCOL protocolname TOusername

parameter

SELECT

允许从指定的表,视图或序列的任何列中进行SELECT。也允许使用COPY TO。对于序列,此权限还允许使用currval函数。

INSERT

允许在指定的表中插入新行。也允许COPY FROM。

UPDATE

允许指定表的任何列的UPDATE。 SELECT ...FOR UPDATE和SELECT ... FOR SHARE也需要此权限(以及SELECT权限)。对于序列,此特权允许使用nextval和setval函数。

DELETE

允许从指定的表删除一行。

REFERENCES

这个关键字是接受的,虽然Greenplum数据库目前不支持外键限制。要创建外键约束,必须在引用和引用的表上都具有此权限。

TRIGGER

允许在指定的表上创建一个触发器。

注意:Greenplum数据库不支持触发器。

TRUNCATE

允许TRUNCATE从指定的表中的所有行。

CREATE

对于数据库,允许在数据库中创建新的模式。

对于模式,允许在模式中创建新对象。要重命名现有对象,您必须拥有该对象并拥有包含模式的此权限。

对于表空间,允许在表空间中创建表和索引,并允许创建具有表空间作为其默认表空间的数据库。 (请注意,撤消此权限不会更改现有对象的位置。)

CONNECT

允许用户连接到指定的数据库。在连接启动时检查此特权(除了检查pg_hba.conf强加的任何限制)。

TEMPORARY TEMP

允许在使用数据库时创建临时表。

EXECUTE

允许使用指定的函数和使用在函数顶部实现的任何操作符。这是唯一适用于功能的特权类型。 (此语法也适用于聚合函数。)

USAGE

对于程序语言,允许使用指定的语言来创建该语言的函数。这是唯一适用于程序语言的特权类型。

对于模式,允许对指定模式中包含的对象进行访问(假设对象的特权要求也得到满足)。基本上这允许受让人查看模式中的对象。

对于序列,此权限允许使用currval和nextval函数。

ALL PRIVILEGES

一次授予所有可用权限。 PRIVILEGES关键字在Greenplum数据库中是可选的,尽管它是严格SQL所要求的。

PUBLIC

一个特殊的组级角色,表示将授予所有角色的权限,包括稍后可能创建的角色。

WITH GRANTOPTION

特权的接收者可能会将其授予其他人。

WITH ADMIN OPTION

角色的成员可能会将其角色授予他人。

Notes

无论对象权限设置如何,数据库超级用户都可以访问所有对象。此规则的一个例外是查看对象。视图中引用的表的访问由视图所有者的权限决定,而不是当前用户(即使当前用户是超级用户)。

如果超级用户选择发出GRANT或REVOKE命令,则该命令将被执行,就好像它是由一个对象的所有者发出的。特别是,通过这样的命令授予的特权将被对象所有者授予。对于角色成员资格,成员资格似乎已被包含角色本身授予。

GRANT和REVOKE也可以由不是受影响的对象的所有者的角色来完成,而是拥有对象的角色的成员,也可以是在对象上拥有GRANTOPTION权限的角色的成员。在这种情况下,权限将被记录为实际拥有对象的角色或拥有GRANTOPTION权限的角色。

授予表的权限不会自动扩展表所使用的任何序列的权限,包括与SERIAL列相关的序列。序列上的权限必须单独设置。

Greenplum数据库不支持授予或撤销表的各个列的权限。

一种可能的解决方法是创建一个只包含所需列的视图,然后向该视图授予权限。

使用psql的\ z meta-command来获取有关对象的现有权限的信息。

.

示例

授予对表mytabie上的所有角色的INSERT权限:

GRANT INSERTON mytable TO PUBLIC;

将所有可用的权限授予角色sally,以获取视图。 请注意,虽然上述将确实授予所有特权,如果由超级用户或topten的所有者执行,当由其他人执行时,它将仅授予授予角色授予选项的权限。

GRANT ALLPRIVILEGES ON topten TO sally;

Grantmembership in role admins to user joe:

GRANT adminsTO joe;

兼容性

PRIVILEGES关键字在SQL标准中是必需的,但在Greenplum数据库中是必需的。 SQL标准不支持为每个命令设置多个对象的权限。

Greenplum数据库允许对象所有者撤销他自己的普通权限:例如,表所有者可以通过撤销自己的INSERT,UPDATE,DELETE和TRUNCATE权限使表变为只读。 这根据SQL标准是不可能的。 Greenplum数据库将所有者的权限视为业主自己授予的; 所以他也可以撤销他们。 在SQL标准中,所有者的权限由假定的系统实体授予。

SQL标准允许为表中的各个列设置权限。

SQL标准提供对其他类型对象的USAGE特权:character sets, collations, translations,domains.。

数据库,表空间,模式和语言的权限是Greenplum数据库扩展。

相关参考

REVOKE