共享对数据的写入访问权限(预览版)
您可以跨同一 AWS 账户内的不同 Amazon Redshift 集群或 Amazon Redshift Serverless 工作组共享数据库对象以进行读取和写入,也可以在不同账户和不同区域之间进行共享。本主题中的过程展示了如何设置包含写入权限的数据共享。您可以为不同的表授予 SELECT、INSERT 和 UPDATE 等权限,为架构授予 USAGE 和 CREATE 权限。一旦提交写入事务,所有仓库都可获得实时数据。生产者账户管理员可以确定特定的命名空间或区域是否获得对数据的只读、读写或任何访问权限。
以下各节介绍如何配置数据共享。这些过程假设您在处理预置集群或 Amazon Redshift Serverless 工作组中的数据库。
只读数据共享与读写数据共享
以前,数据共享中的对象在所有情况下都是只读的。写入数据共享中的对象是一项新功能。只有当生产者特别授予数据共享中对象的 INSERT 或 CREATE 等写入权限时,数据共享中的对象才会启用写入功能。此外,对于跨账户共享,生产者必须授权数据共享以进行写入,而使用者必须关联特定的集群和工作组才能写入。详细信息将在本主题的后续章节中介绍。
您可以向数据共享授予的权限(预览版)
在数据共享上下文中,您可以向它们授予不同的对象类型和各种权限。
架构:
USAGE
CREATE
表:
SELECT
INSERT
UPDATE
DELETE
TRUNCATE
DROP
REFERENCES
函数:
EXECUTE
数据库:
CREATE
预览版数据共享的要求和限制
连接 – 必须直接连接到数据共享数据库或运行 USE 命令才能写入数据共享。但是,我们很快就会启用使用由三部分组成的表示法进行此操作的功能。
可用性 – 您必须使用 Serverless 工作组、ra3.4xl 集群或 ra3.16xl 集群才能使用此功能。计划支持 ra3.xlplus 集群。
元数据发现 – 如果您是通过 Redshift JDBC、ODBC 或 Python 驱动程序直接连接到数据共享数据库的使用者,您可以通过以下方式查看目录数据:
数据 API – 您无法通过数据 API 连接到数据共享数据库。我们将很快提供这方面的支持。
权限可见性 – 使用者看不到授予数据共享的权限。我们将很快添加这一功能。
加密 – 对于跨账户数据共享,必须对生产者和使用者集群进行加密。
隔离级别 – 您数据库的隔离级别必须是快照隔离,以便允许其他 Serverless 工作组和集群对其进行写入。
自动操作 – 写入数据共享对象的使用者不会触发自动分析操作。因此,在向表中插入数据后,生产者必须手动运行分析才能更新表统计信息。否则,查询计划可能无法达到最佳效果。
多语句查询和事务 – 目前不支持事务块之外的多语句查询。因此,如果您使用的是像 dbeaver 这样的查询编辑器,并且有多个写入查询,则需要将查询封装在显式 BEGIN...END 事务语句中。
支持的 SQL 语句
通过写入共享数据的公开预览版支持以下语句:
BEGIN | START TRANSACTION
END | COMMIT | ROLLBACK
COPY without COMPUPDATE
{ CREATE | DROP } SCHEMA
{ CREATE | DROP | SHOW } TABLE
CREATE TABLE table_name AS
DELETE
{ GRANT | REVOKE } privilege_name ON OBJECT_TYPE object_name TO consumer_user
INSERT
SELECT
INSERT INTO SELECT
TRUNCATE
UPDATE
超级数据类型列
不支持的语句类型 - 不支持以下语句类型:
写入生产者时,对使用者仓库进行多语句查询。
并发扩展查询从使用者写入生产者。
自动复制作业从使用者写入生产者。
流式作业从使用者写入生产者。
使用者在生产者集群上创建零 ETL 集成表。有关零 ETL 集成的更多信息,请参阅使用零 ETL 集成。
用交错排序键写入表。
以生产者账户管理员的身份在具有写入权限的账户内共享数据(预览版)
以前,数据共享中的对象在所有情况下都是只读的。写入数据共享中的对象是一项新功能。只有当生产者特别授予数据共享中对象的 INSERT 或 CREATE 等写入权限时,数据共享中的对象才会启用写入功能。详细信息将在本主题的后续章节中介绍。
如果您要查找只读数据存储的现有文档,请访问 Amazon Redshift 跨集群共享数据。
要开始数据共享,生产者上的管理员会创建一个数据共享并向其中添加对象:
生产者数据库所有者或超级用户创建数据共享。数据共享是数据库对象、权限和使用者的逻辑容器。(使用者是指您的账户和其他账户中的集群或 Amazon Redshift Serverless 命名空间。) 每个数据共享都与在其中创建的数据库相关联,并且只能添加该数据库中的对象。下面的命令将创建一个数据共享:
CREATE DATASHARE my_datashare [PUBLICACCESSIBLE = TRUE];
设置 PUBLICACCESSIBLE = TRUE 允许使用者从可公开访问的集群和预置工作组中查询您的数据共享。如果您不想允许查询,请将其省略或明确设置为 false。
数据共享所有者必须对要添加到数据共享的架构授予 USAGE 权限。GRANT 命令是新的。它用于授予对架构的各种操作,包括 CREATE 和 USAGE。架构中包含共享对象:
CREATE SCHEMA myshared_schema1; CREATE SCHEMA myshared_schema2; GRANT USAGE ON SCHEMA myshared_schema1 TO DATASHARE my_datashare; GRANT CREATE, USAGE ON SCHEMA myshared_schema2 TO DATASHARE my_datashare;
或者,管理员可以继续运行 ALTER 命令将架构添加到数据共享。以这种方式添加架构时,仅授予 USAGE 权限。
ALTER DATASHARE my_datashare ADD SCHEMA myshared_schema1;
-
管理员添加架构后,可以授予对架构中对象的数据共享权限。这些权限可以是读取和写入权限。GRANT ALL 示例显示了如何授予所有权限。
GRANT SELECT, INSERT ON TABLE myshared_schema1.table1, myshared_schema1.table2, myshared_schema2.table1 TO DATASHARE my_datashare; GRANT ALL ON TABLE myshared_schema1.table4 TO DATASHARE my_datashare;
您可以继续运行 ALTER DATASHARE 等命令来添加表。这样做时,只会对添加的对象授予 SELECT 权限。
ALTER DATASHARE my_datashare ADD TABLE myshared_schema1.table1, myshared_schema1.table2, myshared_schema2.table1;
管理员将数据共享的使用权限授予账户中的特定命名空间。您可以在集群详细信息页面、Amazon Redshift Serverless 命名空间详细信息页面中或通过运行命令
SELECT current_namespace;
来找到作为 ARN 一部分的命名空间 ID。有关更多信息,请参阅 CURRENT_NAMESPACE。GRANT USAGE ON DATASHARE my_datashare TO NAMESPACE '86b5169f-012a-234b-9fbb-e2e24359e9a8';