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

本页面介绍了如何将精细访问权限控制与 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.

行过滤也适用于变更数据流的以下元数据视图 read 函数:

注意事项

  • 变更数据流使用元数据数据库来维护内部状态。通过 元数据数据库可以与应用相同,也可以不同 数据库。我们建议您使用其他数据库。但是,对于 精细的访问权限控制用户,元数据数据库不能与应用相同 数据库。这是因为运行 Dataflow 作业需要数据库级的 元数据数据库。这会覆盖 应用数据库的配置情况

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

  • 由于变更数据流包含 跟踪表和列,则在授予用户访问 变更数据流。变更数据流的读取者可以从 跟踪的表格和列,即使它们没有 SELECT 表和列的相关权限。虽然更为灵活 为变更数据流及其跟踪的表格设置单独的控件, 因此存在潜在风险,因此在设计数据库结构时 设置相应的角色和权限例如,在撤消 SELECT 时 针对某个角色授予表的权限,请考虑是否也撤消 SELECT 针对变更数据流,并撤消对相关读取的 EXECUTE 函数。

  • 如果您针对跟踪所有表的变更数据流授予 SELECT,则被授权者 可以查看将来添加的任何表的数据更改。

更多信息