Snowflake 特征平台访问控制模型

备注

Snowflake 特征平台 API 在 Snowpark ML Python 包 (snowflake-ml-python) v1.5.0 及更高版本中提供。

Snowflake 特征平台所需的权限取决于用户的类型。

  • 制作者 可以创建和操作特征视图。

  • 使用者 可以读取有关特征平台中的特征视图和实体的信息。

通常,每种类型的用户都有自己的 Snowflake 数据库角色,并具有必要的权限。最自然的特征平台角色配置方式是使用 角色层次结构

在两个特征平台中设置使用者和制作者角色的示例

制作者需要以下权限:

  • 对特征平台架构的 CREATE DYNAMIC TABLE、CREATE TAG 和 CREATE VIEW 权限。

    备注

    对于具有增量刷新功能的 Snowflake 管理的特征视图(由动态表支持),源表必须 已启用变更跟踪,或者用户必须拥有这些表的 OWNERSHIP,这样才能在创建特征视图时自动启用变更跟踪。

  • 对特征平台架构和/或目标架构的 CREATE TABLE 和 CREATE DATASET(在生成用于训练的数据集时)权限。

  • 对特征平台架构中动态表和任务的 OPERATE 权限,用以管理特征视图刷新设置。

  • 对传入到特征平台初始化程序的仓库的 USAGE 权限。

  • 如果特征平台架构已存在,并且制作者具备其使用权限,则 CREATE SCHEMA 权限是可选的。

  • 下方列出了所有使用者权限。

使用者至少需要具备以下权限:

  • 对特征平台数据库和架构的 USAGE 权限。

  • 对特征平台架构中 DYNAMIC TABLES 的 SELECT 和 MONITOR 权限。

  • 对特征平台架构中视图的 SELECT 和 REFERENCE 权限。

  • 对传递给特征平台初始化程序的仓库的 USAGE 权限。

使用者还可以拥有以下权限,以允许其使用特征平台数据:

  • 对特征平台架构和/或目标架构的 CREATE TABLE 和 CREATE DATASET 权限,用以生成用于训练的数据集。

  • 对特征平台中表或包含所生成数据集的任何架构的 SELECT 和 REFERENCE 权限。

  • 对特征平台架构或包含所生成数据集的任何架构中的 DATASETs 的 USAGE 权限。

对于多个特征平台,您可能拥有两类角色,分别针对每个单独的特征平台和多个特征平台的逻辑分组。

备注

需要具有 MANAGE GRANTSCREATE ROLECREATE SCHEMA ON DATABASE <DB> 权限的角色,以配置必要的特征平台角色和权限。您可以使用 ACCOUNTADMIN 内置角色,也可以使用具有这些权限的自定义角色。

Python 中的访问控制设置

snowflake-ml-python 包版本 1.6.3 及更高版本包含 setup_feature_store 实用程序 API,用于配置具有制作者以及使用者角色和权限的新特征平台。在下面的示例中,在指示的位置填入数据库、架构、仓库以及制作者和使用者角色的名称。

from snowflake.ml.feature_store import setup_feature_store

setup_feature_store(
    session=session,
    database="<FS_DATABASE_NAME>",
    schema="<FS_SCHEMA_NAME>",
    warehouse="<FS_WAREHOUSE>",
    producer_role="<FS_PRODUCER_ROLE>",
    consumer_role="<FS_CONSUMER_ROLE>",
)
Copy

SQL 中的访问控制设置

您可以使用以下 SQL 命令手动配置特征平台角色和权限。请注意,在第一个块中,有几条 SET 命令告知脚本您想要使用的制作者和使用者角色的名称,以及将存储特征视图的数据库和架构的名称。如果这些对象不存在,则系统会创建所有这些对象。

-- Initialize variables for usage in SQL scripts below
SET FS_ROLE_PRODUCER = '<FS_PRODUCER_ROLE>';
SET FS_ROLE_CONSUMER = '<FS_CONSUMER_ROLE>';
SET FS_DATABASE = '<FS_DATABASE_NAME>';
SET FS_SCHEMA = '<FS_SCHEMA_NAME>';
SET FS_WAREHOUSE = '<FS_WAREHOUSE>';

-- Create schema
SET SCHEMA_FQN = CONCAT($FS_DATABASE, '.', $FS_SCHEMA);
CREATE SCHEMA IF NOT EXISTS IDENTIFIER($SCHEMA_FQN);

-- Create roles
CREATE ROLE IF NOT EXISTS IDENTIFIER($FS_ROLE_PRODUCER);
CREATE ROLE IF NOT EXISTS IDENTIFIER($FS_ROLE_CONSUMER);

-- Build role hierarchy
GRANT ROLE IDENTIFIER($FS_ROLE_PRODUCER) TO ROLE SYSADMIN;
GRANT ROLE IDENTIFIER($FS_ROLE_CONSUMER) TO ROLE IDENTIFIER($FS_ROLE_PRODUCER);

-- Grant PRODUCER role privileges
GRANT CREATE DYNAMIC TABLE ON SCHEMA IDENTIFIER($SCHEMA_FQN) TO ROLE IDENTIFIER($FS_ROLE_PRODUCER);
GRANT CREATE VIEW ON SCHEMA IDENTIFIER($SCHEMA_FQN) TO ROLE IDENTIFIER($FS_ROLE_PRODUCER);
GRANT CREATE TAG ON SCHEMA IDENTIFIER($SCHEMA_FQN) TO ROLE IDENTIFIER($FS_ROLE_PRODUCER);
GRANT CREATE DATASET ON SCHEMA IDENTIFIER($SCHEMA_FQN) TO ROLE IDENTIFIER($FS_ROLE_PRODUCER);
GRANT CREATE TABLE ON SCHEMA IDENTIFIER($SCHEMA_FQN) TO ROLE IDENTIFIER($FS_ROLE_PRODUCER);

-- Grant CONSUMER role privileges
GRANT USAGE ON DATABASE IDENTIFIER($FS_DATABASE) TO ROLE IDENTIFIER($FS_ROLE_CONSUMER);
GRANT USAGE ON SCHEMA IDENTIFIER($SCHEMA_FQN) TO ROLE IDENTIFIER($FS_ROLE_CONSUMER);

GRANT SELECT, MONITOR ON FUTURE DYNAMIC TABLES IN SCHEMA IDENTIFIER($SCHEMA_FQN) TO ROLE IDENTIFIER($FS_ROLE_CONSUMER);
GRANT SELECT, MONITOR ON ALL DYNAMIC TABLES IN SCHEMA IDENTIFIER($SCHEMA_FQN) TO ROLE IDENTIFIER($FS_ROLE_CONSUMER);

GRANT SELECT, REFERENCES ON FUTURE VIEWS IN SCHEMA IDENTIFIER($SCHEMA_FQN) TO ROLE IDENTIFIER($FS_ROLE_CONSUMER);
GRANT SELECT, REFERENCES ON ALL VIEWS IN SCHEMA IDENTIFIER($SCHEMA_FQN) TO ROLE IDENTIFIER($FS_ROLE_CONSUMER);

GRANT USAGE ON FUTURE DATASETS IN SCHEMA IDENTIFIER($SCHEMA_FQN) TO ROLE IDENTIFIER($FS_ROLE_CONSUMER);
GRANT USAGE ON ALL DATASETS IN SCHEMA IDENTIFIER($SCHEMA_FQN) TO ROLE IDENTIFIER($FS_ROLE_CONSUMER);

-- Grant USAGE ON WAREHOUSE to CONSUMER
GRANT USAGE ON WAREHOUSE IDENTIFIER($FS_WAREHOUSE) TO ROLE IDENTIFIER($FS_ROLE_CONSUMER);
Copy
语言: 中文