本页面介绍了精细访问权限控制如何与 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 方言数据库:
INFORMATION_SCHEMA.CHANGE_STREAM_PRIVILEGES
- PostgreSQL 方言数据库:
information_schema.change_stream_privileges
系统会根据当前数据库角色对变更数据流的权限来过滤这些视图中的行。这样可以确保主帐号只能查看他们有权访问的角色、权限和变更数据流。
行过滤功能也适用于以下与变更数据流相关的视图:
GoogleSQL
INFORMATION_SCHEMA.CHANGE_STREAMS
INFORMATION_SCHEMA.CHANGE_STREAM_TABLES
INFORMATION_SCHEMA.CHANGE_STREAM_COLUMNS
INFORMATION_SCHEMA.CHANGE_STREAM_OPTIONS
系统角色 spanner_info_reader
及其成员始终会看到未经过滤的 INFORMATION_SCHEMA
。
PostgreSQL
information_schema.change_streams
information_schema.change_stream_tables
information_schema.change_stream_columns
information_schema.change_stream_options
系统角色 spanner_info_reader
及其成员会看到未经过滤的 information_schema
。
行过滤还适用于变更数据流读取函数的以下元数据视图:
GoogleSQL
PostgreSQL
注意事项
变更流使用元数据数据库来维护内部状态。元数据数据库可以与应用数据库相同,也可以不同。我们建议您使用其他数据库。但是,对于精细的访问权限控制用户,元数据数据库不能与应用数据库相同。这是因为运行 Dataflow 作业的 IAM 主帐号需要元数据数据库的数据库级读写权限。这会覆盖为应用数据库配置的精细访问权限控制权限。
如需了解详情,请参阅考虑使用单独的元数据数据库。
由于变更数据流包含所跟踪表和列中数据的单独副本,因此在向用户授予变更数据流访问权限时请务必小心谨慎。变更数据流的读取者可以查看所跟踪表和列中的数据更改,即使他们对表和列没有
SELECT
权限也是如此。虽然对变更数据流及其跟踪的表和列设置单独的控制措施更为灵活,但这种方法存在潜在风险,因此请务必相应地设计数据库角色和权限的结构。例如,从角色撤消对表的SELECT
权限时,请考虑是否同时撤消变更流的SELECT
以及相关读取函数的EXECUTE
。如果您对跟踪所有表的变更数据流授予
SELECT
权限,则受助人可以看到未来添加的任何表的数据更改。