GRANT
为用户或角色定义访问权限。
权限包括各种访问选项,例如读取表和视图中的数据、写入数据、创建表和删除表的功能。使用此命令可授予对表、数据库、架构、函数、过程、语言或列的特定权限。要撤销对数据库对象的权限,请使用 REVOKE 命令。
权限还包括以下数据共享生产者访问选项:
-
向使用者命名空间和账户授予数据共享访问权限。
-
通过在数据共享中添加或删除对象来授予更改数据共享的权限。
-
通过在数据共享中添加或删除使用者命名空间来授予共享数据共享的权限。
数据共享使用者访问选项如下:
-
向用户授予对通过数据共享创建的数据库或指向此类数据库的外部架构的完全访问权限。
-
向用户授予对通过数据共享创建的数据库的对象级权限,就像对本地数据库对象一样。要授予此级别的权限,在从数据共享创建数据库时必须使用 WITH PERMISSIONS 子句。有关更多信息,请参阅 CREATE DATABASE。
有关数据共享权限的更多信息,请参阅集群内部和集群之间的数据共享。
您还可以授予角色来管理数据库权限,以及控制用户可以对您的数据执行的操作。通过定义角色并向用户分配角色,您可以限制这些用户能够执行的操作,例如限制用户只能使用 CREATE TABLE 和 INSERT 命令。有关 CREATE ROLE 命令的更多信息,请参阅 CREATE ROLE。Amazon Redshift 有一些系统定义的角色,您也可以使用这些角色向用户授予特定权限。有关更多信息,请参阅 Amazon Redshift 系统定义的角色。
您只能将对于外部架构的 GRANT 或 REVOKE USAGE 权限授予使用 ON SCHEMA 语法的数据库用户和用户组。将 ON EXTERNAL SCHEMA 与 AWS Lake Formation 搭配使用时,您只能向 AWS Identity and Access Management (IAM) 角色授予 GRANT 和 REVOKE 权限。有关权限的列表,请参阅“语法”。
对于存储过程,唯一可以授予的权限是 EXECUTE。
您不能在以下事务数据块内的(外部资源)上运行 GRANT:(BEGIN ... END)。有关事务的更多信息,请参阅 可序列化的隔离。
要查看已向用户授予了数据库的哪些权限,请使用 HAS_DATABASE_PRIVILEGE。要查看已向用户授予了针对架构的哪些权限,请使用 HAS_SCHEMA_PRIVILEGE。要查看已向用户授予了表的哪些权限,请使用 HAS_TABLE_PRIVILEGE。
语法
GRANT { { SELECT | INSERT | UPDATE | DELETE | DROP | REFERENCES | ALTER | TRUNCATE } [,...] | ALL [ PRIVILEGES ] } ON { [ TABLE ] table_name [, ...] | ALL TABLES IN SCHEMA schema_name [, ...] } TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...] GRANT { { CREATE | TEMPORARY | TEMP | ALTER } [,...] | ALL [ PRIVILEGES ] } ON DATABASE db_name [, ...] TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...] GRANT { { CREATE | USAGE | ALTER } [,...] | ALL [ PRIVILEGES ] } ON SCHEMA schema_name [, ...] TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...] GRANT { EXECUTE | ALL [ PRIVILEGES ] } ON { FUNCTION function_name ( [ [ argname ] argtype [, ...] ] ) [, ...] | ALL FUNCTIONS IN SCHEMA schema_name [, ...] } TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...] GRANT { EXECUTE | ALL [ PRIVILEGES ] } ON { PROCEDURE procedure_name ( [ [ argname ] argtype [, ...] ] ) [, ...] | ALL PROCEDURES IN SCHEMA schema_name [, ...] } TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...] GRANT USAGE ON LANGUAGE language_name [, ...] TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
以下是 Amazon Redshift 表和视图上的列级别权限的语法。
GRANT { { SELECT | UPDATE } ( column_name [, ...] ) [, ...] | ALL [ PRIVILEGES ] ( column_name [,...] ) } ON { [ TABLE ] table_name [, ...] } TO { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
以下是向具有指定角色的用户和组授予 ASSUMEROLE 权限的语法。要开始使用 ASSUMEROLE 权限,请参阅有关授予 ASSUMEROLE 权限的使用说明。
GRANT ASSUMEROLE ON { 'iam_role' [, ...] | default | ALL } TO { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...] FOR { ALL | COPY | UNLOAD | EXTERNAL FUNCTION | CREATE MODEL } [, ...]
以下是 Redshift Spectrum 与 Lake Formation 集成的语法。
GRANT { SELECT | ALL [ PRIVILEGES ] } ( column_list ) ON EXTERNAL TABLE schema_name.table_name TO { IAM_ROLE iam_role } [, ...] [ WITH GRANT OPTION ] GRANT { { SELECT | ALTER | DROP | DELETE | INSERT } [, ...] | ALL [ PRIVILEGES ] } ON EXTERNAL TABLE schema_name.table_name [, ...] TO { { IAM_ROLE iam_role } [, ...] | PUBLIC } [ WITH GRANT OPTION ] GRANT { { CREATE | ALTER | DROP } [, ...] | ALL [ PRIVILEGES ] } ON EXTERNAL SCHEMA schema_name [, ...] TO { IAM_ROLE iam_role } [, ...] [ WITH GRANT OPTION ]
生产者端数据共享权限
以下是使用 GRANT 向用户或角色授予 ALTER 或 SHARE 权限的语法。用户可以使用 ALTER 权限更改数据共享,也可以向具有 SHARE 权限的使用者授予使用权限。您只能向用户和角色授予对数据共享的 ALTER 和 SHARE 权限。
GRANT { ALTER | SHARE } ON DATASHARE datashare_name TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP
group_name
| PUBLIC } [, ...]
以下是使用 GRANT 授予 Amazon Redshift 上的数据共享使用权限的语法。您可以使用 USAGE 权限向使用者授予对数据共享的访问权限。您不能将此权限授予用户或用户组。此权限也不支持 GRANT 语句的 WITH GRANT OPTION。只有具有先前针对数据共享授予了他们 SHARE 权限的用户或用户组才能运行此类型的 GRANT 语句。
GRANT USAGE ON DATASHARE datashare_name TO NAMESPACE 'namespaceGUID' | ACCOUNT 'accountnumber' [ VIA DATA CATALOG ]
以下是如何向 Lake Formation 账户授予数据共享使用权的一个示例。
GRANT USAGE ON DATASHARE salesshare TO ACCOUNT '123456789012' VIA DATA CATALOG;
使用者端数据共享权限
以下是根据数据共享创建的特定数据库或 schema 的 GRANT 数据共享使用权限的语法。
使用者访问通过数据共享创建的数据库所需的其他权限会有所不同,具体取决于用于从数据共享创建数据库的 CREATE DATABASE 命令是否使用 WITH PERMISSIONS 子句。有关 CREATE DATABASE 命令和 WITH PERMISSIONS 子句的更多信息,请参阅CREATE DATABASE。
未使用 WITH PERMISSIONS 子句创建的数据库
在不使用 WITH PERMISSIONS 子句的情况下,对通过数据共享创建的数据库授予 USAGE 权限时,无需对共享数据库中的对象单独授予权限。在不使用 WITH PERMISSIONS 子句的情况下,获准使用从数据共享创建的数据库的实体可以自动访问数据库中的所有对象。
使用 WITH PERMISSIONS 子句创建的数据库
如果共享数据库是使用 WITH PERMISSIONS 子句从数据共享中创建的,则在授予数据库 USAGE 权限时,使用者端实体仍必须获得共享数据库中数据库对象的相关权限才能访问这些对象,就像对本地数据库对象授予权限一样。要向通过数据共享创建的数据库中的对象授予权限,请使用由三部分组成的语法 database_name.schema_name.object_name
。要向外部架构中指向共享数据库中共享架构的对象授予权限,请使用由两部分组成的语法 schema_name.object_name
。
GRANT USAGE ON { DATABASE shared_database_name [, ...] | SCHEMA shared_schema} TO { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
限定范围权限允许您向用户或角色授予对数据库或架构中某一类型的所有对象的访问权限。具有限定范围权限的用户和角色对数据库或架构中的所有当前和未来对象具有指定权限。
您可以在 SVV_DATABASE_PRIVILEGES 中查看数据库级限定权限的范围。您可以在 SVV_SCHEMA_PRIVILEGES 中查看架构级限定权限的范围。
以下是向用户和角色授予限定范围权限的语法。有关限定范围权限的更多信息,请参阅限定范围权限。
GRANT { CREATE | USAGE | ALTER } [,...] | ALL [ PRIVILEGES ] } FOR SCHEMAS IN DATABASE db_name TO { username [ WITH GRANT OPTION ] | ROLE role_name } [, ...] GRANT { { SELECT | INSERT | UPDATE | DELETE | DROP | ALTER | TRUNCATE | REFERENCES } [, ...] } | ALL [PRIVILEGES] } } FOR TABLES IN {SCHEMA schema_name [DATABASE db_name ] | DATABASE db_name } TO { username [ WITH GRANT OPTION ] | ROLE role_name} [, ...] GRANT { EXECUTE | ALL [ PRIVILEGES ] } FOR FUNCTIONS IN {SCHEMA schema_name [DATABASE db_name ] | DATABASE db_name } TO { username [ WITH GRANT OPTION ] | ROLE role_name | } [, ...] GRANT { EXECUTE | ALL [ PRIVILEGES ] } FOR PROCEDURES IN {SCHEMA schema_name [DATABASE db_name ] | DATABASE db_name } TO { username [ WITH GRANT OPTION ] | ROLE role_name | } [, ...] GRANT USAGE FOR LANGUAGES IN {DATABASE db_name} TO { username [ WITH GRANT OPTION ] | ROLE role_name } [, ...]
请注意,范围限定的权限不区分函数的权限和过程的权限。例如,以下语句授予 bob
对架构 Sales_schema
中函数和过程的 EXECUTE
权限。
GRANT EXECUTE FOR FUNCTIONS IN SCHEMA Sales_schema TO bob;
以下是有关 Amazon Redshift 上机器学习模型权限的语法。
GRANT CREATE MODEL TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...] GRANT { EXECUTE | ALL [ PRIVILEGES ] } ON MODEL model_name [, ...] TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
以下是授予角色对 Amazon Redshift 权限的语法。
GRANT { ROLE role_name } [, ...] TO { { user_name [ WITH ADMIN OPTION ] } | ROLE role_name }[, ...]
以下是向角色授予对 Amazon Redshift 的系统权限的语法。
GRANT { { CREATE USER | DROP USER | ALTER USER | CREATE SCHEMA | DROP SCHEMA | ALTER DEFAULT PRIVILEGES | ACCESS CATALOG | CREATE TABLE | DROP TABLE | ALTER TABLE | CREATE OR REPLACE FUNCTION | CREATE OR REPLACE EXTERNAL FUNCTION | DROP FUNCTION | CREATE OR REPLACE PROCEDURE | DROP PROCEDURE | CREATE OR REPLACE VIEW | DROP VIEW | CREATE MODEL | DROP MODEL | CREATE DATASHARE | ALTER DATASHARE | DROP DATASHARE | CREATE LIBRARY | DROP LIBRARY | CREATE ROLE | DROP ROLE | TRUNCATE TABLE VACUUM | ANALYZE | CANCEL }[, ...] } | { ALL [ PRIVILEGES ] } TO { ROLE role_name } [, ...]
以下语法用于授予解释 EXPLAIN 计划中查询的行级别安全性策略筛选器的权限。您可以使用 REVOKE 语句撤消该权限。
GRANT EXPLAIN RLS TO ROLE rolename
以下语法用于授予为查询绕开行级别安全性策略的权限。
GRANT IGNORE RLS TO ROLE rolename
以下语法用于授予对指定行级别安全性策略的权限。
GRANT SELECT ON [ TABLE ] table_name [, ...] TO RLS POLICY policy_name [, ...]
参数
- SELECT
-
授予使用 SELECT 语句从表或视图中选择数据的权限。对于 UPDATE 或 DELETE 操作,也需要 SELECT 权限来引用现有的列值。
- INSERT
-
授予使用 INSERT 语句或 COPY 语句将数据加载到表中的权限。
- UPDATE
-
授予使用 UPDATE 语句更新表列的权限。UPDATE 操作也需要 SELECT 权限,因为这些操作必须引用表列才能确定要更新哪些行或者计算列的新值。
- DELETE
-
授予从表中删除数据行的权限。DELETE 操作也需要 SELECT 权限,因为这些操作必须引用表列才能确定要删除哪些行。
- DROP
-
授予删除表的权限。此权限仅在 Amazon Redshift 以及为 Lake Formation 启用的 AWS Glue Data Catalog 中适用。
- REFERENCES
-
授予创建外键约束的权限。您必须授予对被引用表和引用表的此权限;否则,用户将无法创建约束。
- ALTER
-
根据数据库对象,向用户或用户组授予以下权限:
-
对于表,ALTER 授予更改表或视图的权限。有关更多信息,请参阅 ALTER TABLE。
-
对于数据库,ALTER 授予更改数据库的权限。有关更多信息,请参阅 ALTER DATABASE。
-
对于模式,ALTER 授予更改模式的权限。有关更多信息,请参阅 ALTER SCHEMA。
-
对于外部表,ALTER 授予对为 Lake Formation 启用的 AWS Glue Data Catalog 中的表进行更改的权限。此权限仅在使用 Lake Formation 时适用。
-
- TRUNCATE
-
授予截断表的权限。如果没有此权限,则只有表的拥有者或超级用户才可以截断表。有关 TRUNCATE 命令的更多信息,请参阅 TRUNCATE。
- ALL [ PRIVILEGES ]
-
一次性向指定的用户或角色授予所有可用权限。PRIVILEGES 关键字是可选的。
GRANT ALL ON SCHEMA 不会授予对外部架构的 CREATE 权限。
您可以针对为 Lake Formation 启用的 AWS Glue Data Catalog 中的表授予 ALL 权限。在这种情况下,各个权限(如 SELECT、ALTER 等)将记录在 Data Catalog 中。
注意
Amazon Redshift 不支持 RULE 和 TRIGGER 权限。有关更多信息,请转至 不支持的 PostgreSQL 功能。
- ASSUMEROLE
-
向具有指定角色的用户、角色或组授予运行 COPY、UNLOAD、EXTERNAL FUNCTION 和 CREATE MODEL 命令的权限。用户、角色或组在运行指定的命令时代入该角色。要开始使用 ASSUMEROLE 权限,请参阅有关授予 ASSUMEROLE 权限的使用说明。
- ON [ TABLE ] table_name
-
授予对表或视图的指定权限。TABLE 关键字是可选的。您可以在一个语句中列出多个表和视图。
- ON ALL TABLES IN SCHEMA schema_name
-
授予对被引用架构中的所有表和视图的指定权限。
- ( column_name [,...] ) ON TABLE table_name
-
向用户、组或 PUBLIC 授予对 Amazon Redshift 表或视图的指定列的指定权限。
- ( column_list ) ON EXTERNAL TABLE schema_name.table_name
-
向 IAM 角色授予对引用架构中 Lake Formation 表的指定列的指定权限。
- ON EXTERNAL TABLE schema_name.table_name
-
向 IAM 角色授予对引用架构中指定 Lake Formation 表的指定权限。
- ON EXTERNAL SCHEMA schema_name
-
向 IAM 角色授予对引用架构的指定权限。
- ON iam_role
-
向 IAM 角色授予指定权限。
- TO username
-
指示接收权限的用户。
- TO IAM_ROLE iam_role
-
指示接收权限的 IAM 角色。
- WITH GRANT OPTION
-
指示接收权限的用户随之可以将相同的权限授予其他用户。您无法将 WITH GRANT OPTION 授予组或 PUBLIC。
- ROLE role_name
-
将权限授予角色。
- GROUP group_name
-
将权限授予用户组。可以是逗号分隔的列表,用于指定多个用户组。
- PUBLIC
-
向所有用户授予指定的权限,包括以后创建的用户。PUBLIC 表示一个始终包含所有用户的组。单个用户的权限包含向 PUBLIC 授予的权限、向用户所属的所有组授予的权限以及向用户单独授予的任何权限。
将 PUBLIC 授予 Lake Formation EXTERNAL TABLE 会将权限授予 Lake Formation 所有人组。
- CREATE
-
根据数据库对象,向用户或用户组授予以下权限:
-
对于数据库,CREATE 允许用户在数据库中创建 schemas。
-
对于 schema,CREATE 允许用户在 schema 中创建对象。要重命名对象,用户必须具有 CREATE 权限并拥有要重命名的对象。
-
Amazon Redshift Spectrum 外部 schema 不支持 CREATE ON SCHEMA。要授予在外部 schema 中使用外部表的权限,请向需要访问权限的用户授予 USAGE ON SCHEMA。仅允许外部 schema 的所有者或超级用户在外部 schema 中创建外部表。要移交外部 schema 的所有权,请使用 ALTER SCHEMA 更改所有者。
-
- TEMPORARY | TEMP
-
授予在指定的数据库中创建临时表的权限。要运行 Amazon Redshift Spectrum 查询,数据库用户必须有权在数据库中创建临时表。
注意
默认情况下,向用户授予权限以通过其在 PUBLIC 组中自动获得的成员资格来创建临时表。要删除任何用户创建临时表的权限,请撤销 PUBLIC 组的 TEMP 权限。然后,明确授予特定用户或用户组创建临时表的权限。
- ON DATABASE db_name
-
授予对数据库的指定权限。
- USAGE
-
授予对特定架构的 USAGE 权限,这将使用户能够访问该架构中的对象。必须单独为本地 Amazon Redshift 架构授予对这些对象执行特定操作的权限(例如,对表的 SELECT 或 UPDATE 权限)。默认情况下,所有用户都对 PUBLIC 架构具有 CREATE 和 USAGE 权限。
使用 ON SCHEMA 语法向外部 Schema 授予 USAGE 权限时,无需单独授予对外部 Schema 中对象的操作。相应的目录权限控制对外部 Schema 对象的细粒度权限。
- ON SCHEMA schema_name
-
授予对数据库的指定权限。
Amazon Redshift Spectrum 外部架构不支持 GRANT ALL ON SCHEMA 中的 GRANT CREATE ON SCHEMA 和 CREATE 权限。要授予在外部 schema 中使用外部表的权限,请向需要访问权限的用户授予 USAGE ON SCHEMA。仅允许外部 schema 的所有者或超级用户在外部 schema 中创建外部表。要移交外部 schema 的所有权,请使用 ALTER SCHEMA 更改所有者。
- EXECUTE ON ALL FUNCTIONS IN SCHEMA schema_name
-
授予对被引用架构中的所有函数的指定权限。
对于在 pg_catalog 命名空间中定义的 pg_proc 内置条目,Amazon Redshift 不支持 GRANT 或 REVOKE 语句。
- EXECUTE ON PROCEDURE procedure_name
-
授予对特定存储过程的 EXECUTE 权限。由于存储过程名称可重载,因此您必须包含过程的参数列表。有关更多信息,请参阅 命名存储过程。
- EXECUTE ON ALL PROCEDURES IN SCHEMA schema_name
-
授予对被引用架构中所有存储过程的指定权限。
- USAGE ON LANGUAGE language_name
-
授予对某种语言的 USAGE 权限。
需要 USAGE ON LANGUAGE 权限才能运行 CREATE FUNCTION 命令来创建用户定义函数 (UDF)。有关更多信息,请参阅 UDF 安全性和权限。
需要 USAGE ON LANGUAGE 权限才能通过运行 CREATE PROCEDURE 命令来创建存储过程。有关更多信息,请参阅 存储过程的安全性和权限 。
对于 Python UDF,使用
plpythonu
。对于 SQL UDF,使用sql
。对于存储过程,请使用plpgsql
。 - FOR { ALL | COPY | UNLOAD | EXTERNAL FUNCTION | CREATE MODEL } [, ...]
-
指定被授予权限的 SQL 命令。您可以指定 ALL 以授予对 COPY、UNLOAD、EXTERNAL FUNCTION 和 CREATE MODEL 语句的权限。此子句仅适用于授予 ASSUMEROLE 权限。
- ALTER
向用户授予 ALTER 权限,以便将对象添加到数据共享中或从中删除,或设置属性 PUBLICACCESSIBLE。有关更多信息,请参阅 ALTER DATASHARE。
- SHARE
向用户和用户组授予将数据使用者添加到数据共享的权限。要使特定使用者(账户或命名空间)能够从其集群访问数据共享,需要此权限。使用者可以相同或不同的 AWS 账户,集群命名空间与全局唯一标识符 (GUID) 指定的集群命名空间相同或不同。
-
授予对被引用数据共享的指定权限。有关使用者访问控制粒度的信息,请参阅 Amazon Redshift 中不同级别的数据共享。
- USAGE
将 USAGE 授予同一账户中的使用者账户或命名空间时,该账户中的特定使用者账户或命名空间可以以只读方式访问数据共享和数据共享的对象。
- TO NAMESPACE 'clusternamespace GUID'
指示同一账户中的一个命名空间,使用者可以在其中接收对数据共享的指定权限。命名空间使用 128 位的字符数字 GUID。
- TO ACCOUNT 'accountnumber' [ VIA DATA CATALOG ]
指示使用者可以在其中接收对数据共享的指定权限的另一个账号。指定‘VIA DATA CATALOG’表示向 Lake Formation 账户授予使用数据共享的权限。省略此参数意味着您向拥有该集群的账户授予使用权限。
-
授予对在指定数据共享中创建的指定数据库的指定使用权限。
-
授予对在指定数据共享中创建的指定架构的指定权限。
- FOR { SCHEMAS | TABLES | FUNCTIONS | PROCEDURES | LANGUAGES } IN
-
指定要向其授予权限的数据库对象。IN 后面的参数定义了所授予权限的范围。
- CREATE MODEL
向特定用户或用户组授予 CREATE MODEL 权限。
- ON MODEL model_name
授予对特定模型的 EXECUTE 权限。
- ACCESS CATALOG
-
授予查看该角色可访问对象的相关元数据的权限。
- { role } [, ...]
要向其他角色、用户或 PUBLIC 授予的角色。
PUBLIC 表示一个始终包含所有用户的组。单个用户的权限包含向 PUBLIC 授予的权限、向用户所属的所有组授予的权限以及向用户单独授予的任何权限。
- TO { { user_name [ WITH ADMIN OPTION ] } | role }[, ...]
将指定角色授予具有 WITH ADMIN OPTION 权限的指定用户、其他角色或 PUBLIC。
WITH ADMIN OPTION 条件句会向所有被授予者提供所有授予的角色的管理选项。
- EXPLAIN RLS TO ROLE rolename
向角色授予权限,使其可以解释 EXPLAIN 计划中某个查询的行级别安全性策略筛选器。
- IGNORE RLS TO ROLE rolename
向角色授予绕开某个查询的行级别安全性策略的权限。
使用说明
要了解有关 GRANT 使用说明的更多信息,请参阅使用说明。
示例
有关如何使用 GRANT 的示例,请参阅示例。