跳到主要内容

数据共享

引入或更新于:v1.2.949
企业版功能
Data Sharing是企业版功能。 如需获取许可证,请联系 Databend 支持团队。

数据共享(Data Sharing)向其他租户提供指定表的只读访问。Databend 不复制数据。

提供方创建 Share,并将表授权给 Share。消费方基于 Share 创建共享数据库。对共享数据库的查询直接读取提供方数据。

术语​

术语定义
提供方(Provider)拥有源表和 Share 的租户。
消费方(Consumer)获得授权、可以读取 Share 的租户。
Share包含一个数据库授权、表授权、消费方账号和一个连接的对象。
消费方账号Share 中消费方的租户 ID。租户 ID 不是用户名,也不是角色名。
连接(Connection)提供方的存储连接。Databend 使用其凭证读取共享表。
共享数据库消费方基于 Share 创建的只读数据库。它不包含数据副本。

要求​

  • 使用 Databend v1.2.949 或更高版本。
  • Databend Cloud: 提供方和消费方必须位于同一 Region。不支持跨 Region 共享。
  • 自托管 Databend: 提供方和消费方必须使用同一 Databend Meta 集群。每个部署都必须具有包含 DataSharing 功能的企业版许可证。
  • 只能共享 FUSE 表。不支持视图、其他表引擎,以及带有行访问策略或掩码策略的表。
  • 提供方连接必须具有共享表存储位置的读取权限。在自托管 Databend 中,消费方查询节点还必须能够通过网络访问该存储。
  • 提供方和消费方必须具有访问控制中的权限。

快速上手​

示例使用提供方租户 provider_acct 和消费方租户 consumer_acct。每个租户使用各自的会话。

开始前,准备一个 S3 bucket,以及具有该 bucket 读写权限的凭证。示例将共享表存放在该 bucket 中。此步骤也适用于 Databend Cloud。

在提供方会话中执行以下语句:

CREATE CONNECTION share_conn
STORAGE_TYPE = 's3'
ACCESS_KEY_ID = '<your-access-key-id>'
SECRET_ACCESS_KEY = '<your-secret-access-key>';

CREATE DATABASE orders_db;
CREATE TABLE orders_db.orders (id INT, region STRING, amount INT)
's3://<your-bucket>/orders_db/'
CONNECTION = (CONNECTION_NAME = 'share_conn');
INSERT INTO orders_db.orders VALUES (1, 'apac', 100), (2, 'emea', 200);

CREATE SHARE sales_share CONNECTION = share_conn;
GRANT USAGE ON DATABASE orders_db TO SHARE sales_share;
GRANT SELECT ON TABLE orders_db.orders TO SHARE sales_share;
ALTER SHARE sales_share ADD ACCOUNTS = consumer_acct;

为了简化示例,表和 Share 使用同一个连接。使用非 AWS 的 S3 兼容存储时,在连接中添加 ENDPOINT_URL。

在消费方会话中执行以下语句:

CREATE DATABASE shared_orders FROM SHARE provider_acct.sales_share;
SELECT * FROM shared_orders.orders;

各步骤及其选项参见提供方配置和消费方配置。

访问控制​

操作所需权限
CREATE SHARE、ALTER SHARE、DROP SHARE全局 GRANT 权限。
GRANT USAGE ON DATABASE ... TO SHARE全局 GRANT 权限,以及提供方数据库的 USAGE。
GRANT SELECT ON TABLE ... TO SHARE全局 GRANT 权限,以及提供方表的 SELECT。
REVOKE ... FROM SHARE全局 GRANT 权限。如果对象存在,还需要该对象的 USAGE 或 SELECT。
SHOW SHARES、DESCRIBE SHARE不需要其他权限。租户只能看到自己的 Share 和授权给自己的 Share。
CREATE DATABASE ... FROM SHARE全局 CREATE DATABASE 权限。消费方租户必须是该 Share 的消费方账号。

在自托管 Databend 中,所有 Share 操作都需要 DataSharing 许可功能。

存储与连接​

提供方授权表时,Databend 记录该表的存储位置,不记录凭证。消费方读取该表时,Databend 使用当前 Share 连接的凭证。

  • 连接的凭证必须具有已授权表所在 bucket 的读取权限。
  • 连接的存储类型必须与已授权表的存储类型相同。
  • S3、Azure Blob 和 GCS 连接可以提供凭证。不带参数的 fs 连接使用提供方的文件系统配置。不支持其他存储类型。
  • 消费方的默认存储不会改变共享数据的位置。
  • 消费方无法获得连接的凭证。

限制​

  • 一个 Share 只能授权一个数据库。每个数据库使用不同的 Share。
  • 先授予数据库的 USAGE,再授予每张表的 SELECT。只有 USAGE 不能访问表。
  • 不支持列级授权和通配符表授权。
  • 共享表为只读。消费方不能修改数据或表定义。
  • 消费方不能将共享数据库授权给 Share。
  • SHOW SHARES 只支持 LIKE 和 LIMIT。
  • 提供方的变更对后续查询生效。正在执行的查询会继续执行。

消费方可以在共享表上创建 Stream。参见共享表上的 Stream。

数据共享与 ATTACH TABLE​

Databend 有两种不同的共享机制:

机制配置方式访问控制
Share提供方创建 Share。消费方基于 Share 创建共享数据库。提供方控制表授权和消费方账号。
ATTACH TABLE消费方根据存储位置附加表。由存储配置控制访问。不使用 Share。

ATTACH TABLE 参见 Databend 数据共享原理。所有 Share 语句的语法参见 Share SQL 参考。

欢迎体验 Databend Cloud

基于 Rust + 对象存储构建的新一代多模态数仓,一个平台即可进行 BI、向量、全文检索及地理空间分析。

支持标准 SQL,自动弹性伸缩,助您快速构建现代化数据平台。

注册即领 ¥200 代金券。

注册体验