数据质量的访问控制¶
以下各节描述了与数据质量和数据指标函数 (DMFs) 相关的操作的访问控制要求。
常见任务¶
备注
要对架构中的任何对象执行操作,需要对父数据库和架构具有 USAGE 权限。
任务 |
所需权限/角色 |
备注 |
---|---|---|
将 DMF 与表或视图关联 |
账户的 EXECUTE DATA METRIC FUNCTION 权限 |
|
DMF 的 USAGE 权限 |
|
|
以下其中一项:
|
有关 EXECUTE AS ROLE 属性的信息,请参阅 表或视图所需的权限。 |
|
查看对象和 DMFs 之间的关联 |
DMF 的 USAGE 权限 |
|
与 DMF 关联的表或视图的 SELECT 权限 |
||
创建自定义 DMF |
架构的 CREATE DATA METRIC FUNCTION 权限 |
|
手动调用 DMF |
DMF 的 USAGE 权限 |
|
调用中指定的表或视图的 SELECT 权限 |
查看数据质量结果¶
查看选项 |
所需权限/角色 |
备注 |
---|---|---|
DATA_QUALITY_MONITORING_RESULTS_RAW 事件表 |
DATA_QUALITY_MONITORING_ADMIN 应用程序角色 |
|
DATA_QUALITY_MONITORING_RESULTS 视图 |
以下其中一项:
|
|
DATA_QUALITY_MONITORING_RESULTS 函数 |
以下其中一项:
|
|
如果使用 DATA_QUALITY_MONITORING_LOOKUP 应用程序角色,还需要:
|
|
表或视图所需的权限¶
将 DMF 与表或视图关联的访问控制要求之一是拥有该表或视图的相应权限。要将 DMF 与对象关联,您的角色必须具有以下权限之一:
表或视图的 OWNERSHIP 权限
表或视图的 SELECT 权限
如果您希望具有对象的 SELECT 权限的角色能够将 DMFs 与该对象关联,则必须在定义关联时设置 EXECUTE AS ROLE 属性。此属性会指定 DMF 运行时使用的角色。例如,假设角色 analyst_role
具有表 t1
的 SELECT 权限。要将 positive_number_count
DMF 与表 t1
关联,以便其使用 analyst_role
角色运行,请运行以下命令:
ALTER TABLE t1
ADD DATA METRIC FUNCTION governance.dfms.positive_number_count on (c1, c2, c3)
EXECUTE AS ROLE analyst_role;
此命令可以由具有 analyst_role
角色的用户运行,也可以由具有角色层次结构中较高角色(例如,ACCOUNTADMIN 角色)的用户运行。
如果未指定 EXECUTE AS ROLE 属性,则 DMF 使用表所有者的角色运行。DMF 运行时使用的角色很重要,因为它可能会影响数据治理策略,而这些政策会因当前用户的角色不同而有所差异。
EXECUTE AS ROLE 属性的优势¶
EXECUTE AS ROLE 属性允许非所有者在表或视图上关联并运行 DMF。这使得数据监管者无需拥有该表即可创建数据质量检查。
限制¶
您不能使用 MODIFY DATA METRIC FUNCTION 子句来更改 EXECUTE AS ROLE 属性指定的角色。您必须删除关联,然后才能使用新的 EXECUTE AS ROLE 角色重新创建关联。
授予系统 DMFs 的 USAGE 权限¶
关联和运行系统 DMF 需要系统 DMF 的 USAGE 权限。您可以授予 SNOWFLAKE.DATA_METRIC_USER 数据库角色,以便为用户提供所有系统 DMFs 的 USAGE 权限。
例如,要允许具有 data_governor
角色的用户使用系统 DMFs,请执行以下命令:
GRANT DATABASE ROLE snowflake.data_metric_user TO ROLE data_governor;
或者,以下访问控制选项也授予系统 DMFs 的 USAGE 权限。请谨慎行事,因为这些选项提供的不仅仅是系统 DMFs 的访问权限。
向表所有者角色授予对 SNOWFLAKE 数据库的 IMPORTED PRIVILEGES。有关信息,请参阅 允许其他角色使用 SNOWFLAKE 数据库中的架构。
使用 ACCOUNTADMIN 角色。
授予自定义 DMF 的权限¶
GRANT 和 REVOKE 命令要求您指定所创建的自定义 DMF 的实参。例如:
GRANT USAGE ON FUNCTION
governance.dmfs.count_positive_numbers(TABLE(NUMBER, NUMBER, NUMBER))
TO data_engineer;