变更数据流的精细访问权限控制

本页面介绍了精细访问权限控制如何与 GoogleSQL 方言数据库和 PostgreSQL 方言数据库的 Spanner 变更数据流配合使用。

对于精细访问权限控制用户,您可以使用以下授权来允许对变更数据流数据进行读取访问。这两项授权都是必需的。

  • 授予对变更数据流的 SELECT 权限。

    GoogleSQL

    GRANT SELECT ON CHANGE STREAM CHANGE_STREAM_NAME TO ROLE ROLE_NAME;

    PostgreSQL

    GRANT SELECT ON CHANGE STREAM CHANGE_STREAM_NAME TO ROLE_NAME;
  • 针对为变更数据流自动创建的读取函数授予 EXECUTE 权限。您可以使用读取函数读取变更数据流记录。

    GoogleSQL

    GRANT EXECUTE ON TABLE FUNCTION READ_FUNCTION_NAME TO ROLE ROLE_NAME;

    PostgreSQL

    GRANT EXECUTE ON FUNCTION READ_FUNCTION_NAME TO ROLE_NAME;

    如需了解变更数据流读取函数的命名惯例,以及它们返回的信息的格式,请参阅以下主题:

变更数据流的 INFORMATION_SCHEMA 视图

以下视图显示了变更数据流的数据库角色和权限信息:

这些视图中的行会根据变更数据流的当前数据库角色权限进行过滤。这样可确保主账号只能查看其有权访问的角色、权限和变更数据流。

行过滤还适用于以下与变更数据流相关的视图:

GoogleSQL

系统角色 spanner_info_reader 及其成员始终会看到未过滤的 INFORMATION_SCHEMA

PostgreSQL

系统角色 spanner_info_reader 及其成员会看到未过滤的 information_schema

行过滤还适用于变更数据流读取函数的以下元数据视图:

注意事项

  • 变更数据流使用元数据数据库来维护内部状态。元数据数据库可以与应用数据库相同,也可以不同。我们建议您使用其他数据库。不过,对于精细访问权限控制用户,元数据数据库不能与应用数据库相同。这是因为运行 Dataflow 作业的 IAM 主账号需要对元数据数据库拥有数据库级别的读取或写入权限。这会替换为应用数据库配置的精细访问权限控制权限。

    如需了解详情,请参阅考虑使用单独的元数据数据库

  • 由于变更数据流包含跟踪表和列中数据的单独副本,因此在向用户授予对变更数据流的访问权限时,请务必小心。变更数据流的读取者可以查看跟踪表和列中的数据更改,即使他们对这些表和列没有 SELECT 权限也是如此。虽然对变更数据流及其跟踪的表和列设置单独的控制更灵活,但存在潜在风险,因此请确保相应地构建数据库角色和权限。例如,在从某个角色中撤消表的 SELECT 权限时,请考虑是否还要撤消变更数据流的 SELECT 权限和关联的读取函数的 EXECUTE 权限。

  • 如果您针对跟踪所有表的变更数据流授予 SELECT 权限,则授权对象可以查看日后添加的所有表的数据更改。

后续步骤