使用安全视图共享非结构化数据¶
本主题简要介绍如何使用安全视图和 Secure Data Sharing 共享非结构化数据文件。通过 Secure Data Sharing,数据提供商可与另一个 Snowflake 账户下的数据使用者共享一个 Snowflake 账户数据库中的选定对象。
如需更多信息和其他示例,请参阅 使用共享。
第 1 步:创建安全视图¶
首先,使用 CREATE SECURE VIEW 命令,基于暂存区中的非结构化数据创建安全视图。视图允许像访问表一样访问查询结果,安全视图是专门为保护数据隐私而设计的。有关更多信息,请参阅 视图概述。
您可以允许数据使用者从安全视图检索作用域或预签名 URLs。作用域 URLs 能够提供更好的安全性,而预签名 URLs 无需授权或身份验证即可访问。要选择适合您的用例的 URL,请参阅 可用于访问文件的 URLs 类型。
备注
在使用者账户下的用户查询安全视图之前,Snowflake 不会创建作用域或预签名 URLs。这种按需创建行为有助于管理预签名 URLs 的生命周期。为了尽可能降低泄露预签名 URLs 的风险,您还可以为 GET_PRESIGNED_URL 函数的 EXPIRATION_TIME 参数设置较短的时间间隔。
以下示例创建了安全视图,允许数据使用者为一组特定的暂存文件查询作用域或预签名 URLs。两种视图都会查询目录表中的 RELATIVE_PATH 列,以检索作用域或预签名 URL。
有作用域的 URL¶
本示例调用了 BUILD_SCOPED_FILE_URL 函数,以使用作用域 URLs 为一组暂存文件创建安全视图。该示例将 RELATIVE_PATH 列(位于名为 mystage
的暂存区上的目录表中)传递给 BUILD_SCOPED_FILE_URL 函数:
CREATE OR REPLACE SECURE VIEW images_scoped_v AS
SELECT BUILD_SCOPED_FILE_URL(@mystage, relative_path) AS scoped_file_url
FROM DIRECTORY(@mystage);
您还可以基于暂存区中的文件子集创建安全视图,从而避免共享整个暂存区。以下示例创建暂存区上图像的安全视图,其中 client_name
字段等于 abc
:
CREATE OR REPLACE SECURE VIEW images_for_client_abc AS
SELECT build_scoped_file_url(@myStage, relative_path) AS scoped_file_url
FROM directory(@mystage) d join clients c on d.relative_path = c.relative_path
WHERE c.client_name = 'abc';
预签名 URL¶
此示例调用 GET_PRESIGNED_URL 函数,为一组暂存文件检索预签名 URLs。该示例为 EXPIRATION_TIME 参数指定了 60 秒,确保预签名 URLs 仅在一分钟内处于可访问状态。
CREATE OR REPLACE SECURE VIEW images_presigned_v AS
SELECT GET_PRESIGNED_URL(@mystage, relative_path, 60) AS presigned_url
FROM DIRECTORY(@mystage);
第 2 步:创建共享¶
接下来,创建一个空共享,然后授予安全视图对该共享的访问权限。此操作会将安全视图对象添加到共享中。
以下示例使用 CREATE SHARE 命令创建一个共享,然后使用 GRANT <privilege> ...TO SHARE 命令授予安全视图对该共享的 SELECT 权限。
CREATE SHARE my_share;
GRANT SELECT ON my_secure_view TO SHARE my_share;
步骤 3:将账户添加到共享¶
最后,必须将账户添加到共享,以便为使用者账户提供对共享的访问权限。
以下示例使用 ALTER SHARE 命令,将添加名为 consumer_account_1
的账户添加到名为 my_share
的共享。
ALTER SHARE my_share ADD ACCOUNTS=consumer_account_1;
完成此步骤后, consumer_account_1
账户可在安全视图中查看共享并访问文件。