Amazon Redshift
数据库开发人员指南 (API Version 2012-12-01)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

GRANT

为用户或用户组定义访问权限。

权限包括各种访问选项,例如读取表和视图中的数据、写入数据和创建表的能力。使用此命令可以授予对表、数据库、schema 或函数的特定权限。要撤消对数据库对象的权限,请使用 REVOKE 命令。

您无法授予或撤销对外部表的权限。相反,您可授予或撤销对外部架构的权限。

语法

Copy
GRANT { { SELECT | INSERT | UPDATE | DELETE | REFERENCES } [,...] | ALL [ PRIVILEGES ] } ON { [ TABLE ] table_name [, ...] | ALL TABLES IN SCHEMA schema_name [, ...] } TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...] GRANT { { CREATE | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] ] ON DATABASE db_name [, ...] TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...] GRANT { { CREATE | USAGE } [,...] | ALL [ PRIVILEGES ] } ON SCHEMA schema_name [, ...] TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...] GRANT EXECUTE ON { [ FUNCTION ] function_name ( [ [ argname ] argtype [, ...] ] ) [, ...] | ALL FUNCTIONS IN SCHEMA schema_name [, ...] } TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...] GRANT USAGE ON LANGUAGE language_name [, ...] TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...]

参数

SELECT

授予使用 SELECT 语句从表或视图中选择数据的权限。对于 UPDATE 或 DELETE 操作,也需要 SELECT 权限来引用现有的列值。

INSERT

授予用于通过 INSERT 语句或 COPY 语句将数据加载到表中的权限。

UPDATE

授予用于通过 UPDATE 语句更新表列的权限。UPDATE 操作也需要 SELECT 权限,因为这些操作必须引用表列才能确定要更新哪些行或者计算列的新值。

DELETE

授予用于从表中删除数据行的权限。DELETE 操作也需要 SELECT 权限,因为这些操作必须引用表列才能确定要删除哪些行。

REFERENCES

授予用于创建外键约束的权限。您必须授予对被引用表和引用表的此权限;否则,用户将无法创建约束。

ALL [ PRIVILEGES ]

一次性向指定的用户或用户组授予所有可用权限。PRIVILEGES 关键字是可选的。

ON [ TABLE ] table_name

授予对表或视图的指定权限。TABLE 关键字是可选的。您可以在一个语句中列出多个表和视图。

ON ALL TABLES IN SCHEMA schema_name

授予对被引用 schema 中的所有表和视图的指定权限。

TO username

指示接收权限的用户。

WITH GRANT OPTION

指示接收权限的用户又可以将相同权限授予其他用户。您无法将 WITH GRANT OPTION 授予组或 PUBLIC。

GROUP group_name

向用户组授予权限。

PUBLIC

向所有用户授予指定的权限,包括以后创建的用户。PUBLIC 表示一个始终包含所有用户的组。单个用户的权限包含向 PUBLIC 授予的权限、向用户所属的所有组授予的权限以及向用户单独授予的任何权限。

CREATE

根据数据库对象,向用户或用户组授予以下权限:

  • 对于数据库,CREATE 允许用户在数据库中创建 schemas。

  • 对于 schema,CREATE 允许用户在 schema 中创建对象。要重命名对象,用户必须具有 CREATE 权限并拥有要重命名的对象。

TEMPORARY | TEMP

授予用于在指定的数据库中创建临时表的权限。

注意

默认情况下,向用户授予权限以通过其在 PUBLIC 组中自动获得的成员资格来创建临时表。要为任何用户删除用于创建临时表的权限,请撤消 PUBLIC 组的 TEMP 权限,然后明确向特定用户或用户组授予用于创建临时表的权限。

ON DATABASE db_name

授予对数据库的指定权限。

USAGE

授予对特定 schema 的 USAGE 权限,这将使用户能够访问该 schema 中的对象。必须单独授予对这些对象执行特定操作的权限(例如,对表的 SELECT 或 UPDATE 权限)。默认情况下,所有用户都对 PUBLIC schema 具有 CREATE 和 USAGE 权限。

ON SCHEMA schema_name

授予对 schema 的指定权限。

EXECUTE ON [ FUNCTION ] function_name

授予对特定函数的 EXECUTE 权限。由于函数名可重载,因此您必须包含函数的参数列表。有关更多信息,请参阅 UDF 安全性和权限

EXECUTE ON ALL FUNCTIONS IN SCHEMA schema_name

授予对被引用 schema 中的所有函数的指定权限。

USAGE ON LANGUAGE language_name

授予对语言的 USAGE 权限。需要 USAGE ON LANGUAGE 权限才能执行 CREATE FUNCTION 命令来创建 UDF。 有关更多信息,请参阅 UDF 安全性和权限

UDF 和库是使用 Python 语言实施的,因此 language_name 必须为 plpythonu。

使用说明

要授予关于对象的权限,您必须满足以下条件之一:

  • 是对象所有者。

  • 是超级用户。

  • 拥有该对象和权限的授予权限。

例如,以下命令使用户 HR 能够对 employees 表执行 SELECT 命令并对其他用户授予和撤消相同的权限:

Copy
grant select on table employees to HR with grant option;

请注意,HR 无法授予 SELECT 之外的任何操作的权限或 employees 表之外的任何其他表的权限。

获得视图的权限并不意味着对基础表具有权限。同样,获得 schema 的权限并不意味着对该 schema 中的表具有权限。您需要显式授予对基础表的访问权限。

超级用户可以访问所有对象,不管设置对象权限的 GRANT 和 REVOKE 命令如何。

示例

以下示例向用户 fred 授予对 SALES 表的 SELECT 权限。

Copy
grant select on table sales to fred;

以下示例向用户 fred 授予对 QA_TICKIT schema 中所有表的 SELECT 权限。

Copy
grant select on all tables in schema qa_tickit to fred;

以下示例向用户组 QA_USERS 授予对 schema QA_TICKIT 的全部 schema 权限。Schema 权限包括 CREATE 和 USAGE。USAGE 向用户授予访问 schema 中对象的权限,但不授予对这些对象的 INSERT 或 SELECT 之类的权限。必须单独授予关于每个对象的权限。

Copy
create group qa_users; grant all on schema qa_tickit to group qa_users;

以下示例向组 QA_USERS 中的所有用户授予对 QA_TICKIT schema 中的 SALES 表的所有权限。

Copy
grant all on table qa_tickit.sales to group qa_users;

以下命令序列说明,具有对 schema 的访问权限并不表示授予对 schema 中的表的权限。

Copy
create user schema_user in group qa_users password 'Abcd1234'; create schema qa_tickit; create table qa_tickit.test (col1 int); grant all on schema qa_tickit to schema_user; set session authorization schema_user; select current_user; current_user -------------- schema_user (1 row) select count(*) from qa_tickit.test; ERROR: permission denied for relation test [SQL State=42501] set session authorization dw_user; grant select on table qa_tickit.test to schema_user; set session authorization schema_user; select count(*) from qa_tickit.test; count ------- 0 (1 row)

以下命令序列说明,具有对视图的访问权限并不意味着具有对基础表的访问权限。虽然名为 VIEW_USER 的用户已被授予 VIEW_DATE 的所有权限,但该用户无法从 DATE 表中选择数据。

Copy
create user view_user password 'Abcd1234'; create view view_date as select * from date; grant all on view_date to view_user; set session authorization view_user; select current_user; current_user -------------- view_user (1 row) select count(*) from view_date; count ------- 365 (1 row) select count(*) from date; ERROR: permission denied for relation date

本页内容: