在 Microsoft Purview 中连接到并管理 Snowflake

本文概述了如何注册 Snowflake,以及如何在 Microsoft Purview 中对 Snowflake 进行身份验证和交互。 有关 Microsoft Purview 的详细信息,请阅读 Microsoft Purview 概述

Important

Snowflake 宣布弃用基本身份验证, 并计划在 2026 年 8 月前禁用它。 为了与更改保持一致并避免任何服务中断,Microsoft使用 Snowflake 数据映射连接器的 Purview 客户应转换为密钥对 (SHIR) 身份验证。

建议操作(请于 2026 年 7 月前完成):为给客户留出更多时间,Snowflake 允许类型为 LEGACY_SERVICE 的服务用户继续使用基本身份验证,直至 2026 年 7 月。 此策略有助于确保在转换到新的身份验证方法时服务不会中断。 可以在有限时间内继续使用基本身份验证,同时设置和验证新的身份验证机制密钥对。

我们建议Microsoft Purview 客户将其用户更新为 LEGACY_SERVICE 类型。 此更改可确保持续访问,并提供更多时间来完成转换。 必须在 2026 年 7 月底之前完成此更新,方法是在 Snowflake 中运行以下命令

*ALTER USER <purview_user_name> SET TYPE = LEGACY_SERVICE;

从 2026 年 8 月开始,不允许使用 LEGACY_SERVICE 类型创建新用户。

支持的功能

以下部分介绍在 Microsoft Purview 中扫描 Snowflake 时可用的功能。

扫描功能

下表汇总了 Microsoft Purview 中 Snowflake 支持的扫描功能。

元数据提取 完全扫描 增量扫描 范围扫描
Yes Yes Yes

扫描 Snowflake 源时,Microsoft Purview 支持:

  • 提取技术元数据,包括:

    • 服务器
    • Databases
    • Schemas
    • 包含列、外键和唯一约束的表
    • 视图(含列)
    • 存储过程,包括参数数据集和结果集
    • 包含参数数据集的函数
    • 管道
    • 阶段
    • 包含这些列的流
    • Tasks
    • 序列
  • 获取表、视图、流和存储过程之间资产关系的静态血缘信息。

对于存储过程,可以在 “创建并运行扫描 ”部分选择要提取的详细信息级别。 支持 Snowflake Scripting(SQL)和 JavaScript 语言的存储过程血缘,并且该血缘是根据存储过程定义生成的。

设置扫描时,可以选择完全基于给定名称或名称模式扫描一个或多个 Snowflake 数据库,或者进一步将扫描范围限定为与给定名称或名称模式匹配的架构子集。

其他功能

有关 分类策略实时视图,请参阅 受支持的功能列表

已知的限制

在 Microsoft Purview 中扫描 Snowflake 时,请注意以下限制。

  • 从数据源中删除对象时,后续扫描不会自动删除 Microsoft Purview 中的相应资产。
  • 以下模式不支持存储过程世系:
    • Java、Python 和 Scala 语言中定义的存储过程。
    • 使用 SQL EXECUTE IMMEDIATE 将静态 SQL 查询作为变量的存储过程。

Prerequisites

扫描所需的权限

Microsoft Purview 支持用于扫描 Snowflake 的基本身份验证 (用户名和密码) 。 给定用户的默认角色将用于执行扫描。 Snowflake 用户必须对要扫描的仓库和数据库具有使用权限,并且必须具有对系统表的读取权限才能访问高级元数据。

下面是一个示例演练,用于创建专门用于Microsoft Purview 扫描的用户并设置权限。 如果选择使用现有用户,请确保该用户对仓库和数据库对象具有足够的权限。

  1. 设置一个 purview_reader 角色。 需要 ACCOUNTADMIN 权限才能执行此操作。

    USE ROLE ACCOUNTADMIN;
    
    --create role to allow read only access - this will later be assigned to the Microsoft Purview user
    CREATE OR REPLACE ROLE purview_reader;
    
    --make sysadmin the parent role
    GRANT ROLE purview_reader TO ROLE sysadmin;
    
  2. 创建仓库供 Microsoft Purview 使用和授予权限。

    --create warehouse - account admin required
    CREATE OR REPLACE WAREHOUSE purview_wh WITH 
        WAREHOUSE_SIZE = 'XSMALL' 
        WAREHOUSE_TYPE = 'STANDARD' 
        AUTO_SUSPEND = 300 
        AUTO_RESUME = TRUE 
        MIN_CLUSTER_COUNT = 1 
        MAX_CLUSTER_COUNT = 2 
        SCALING_POLICY = 'STANDARD';
    
    --grant rights to the warehouse
    GRANT USAGE ON WAREHOUSE purview_wh TO ROLE purview_reader;
    
  3. 创建用于 Microsoft Purview 扫描的用户 purview

    CREATE OR REPLACE USER purview 
        PASSWORD = '<password>'; 
    
    --note the default role will be used during scan
    ALTER USER purview SET DEFAULT_ROLE = purview_reader;
    
    --add user to purview_reader role
    GRANT ROLE purview_reader TO USER purview;
    
  4. 授予数据库对象的读取者权限。

    GRANT DATABASE ROLE SNOWFLAKE.OBJECT_VIEWER TO USER purview_reader;
    GRANT USAGE ON DATABASE <your_database_name> TO purview_reader;
    
    --grant reader access to all the database structures that purview can currently scan
    GRANT USAGE ON ALL SCHEMAS IN DATABASE <your_database_name> TO role purview_reader;
    GRANT USAGE ON ALL FUNCTIONS IN DATABASE <your_database_name> TO role purview_reader;
    GRANT USAGE ON ALL PROCEDURES IN DATABASE <your_database_name> TO role purview_reader;
    GRANT SELECT ON ALL TABLES IN DATABASE <your_database_name> TO role purview_reader;
    GRANT SELECT ON ALL VIEWS IN DATABASE <your_database_name> TO role purview_reader;
    GRANT USAGE, READ on ALL STAGES IN DATABASE <your_database_name> TO role purview_reader;
    
    --grant reader access to any future objects that could be created
    GRANT USAGE ON FUTURE SCHEMAS IN DATABASE <your_database_name> TO role purview_reader;
    GRANT USAGE ON FUTURE FUNCTIONS IN DATABASE <your_database_name> TO role purview_reader;
    GRANT USAGE ON FUTURE PROCEDURES IN DATABASE <your_database_name> TO role purview_reader;
    GRANT SELECT ON FUTURE TABLES IN DATABASE <your_database_name> TO role purview_reader;
    GRANT SELECT ON FUTURE VIEWS IN DATABASE <your_database_name> TO role purview_reader;
    GRANT USAGE, READ ON FUTURE STAGES IN DATABASE <your_database_name> TO role purview_reader;
    

Register

本节介绍如何使用经典的 Microsoft Purview 治理门户 在 Microsoft Purview 中注册 Snowflake。

注册步骤

若要在 Microsoft Purview 统一目录 中注册新的 Snowflake 源,请执行以下步骤:

  1. 在经典 Microsoft Purview 治理门户中导航到 Microsoft Purview 帐户。
  2. 在左侧导航区域中选择数据地图
  3. 选择“ 注册”。
  4. 在“注册源”上,选择“ Snowflake”。 选择 继续

注册源 (Snowflake) 页面上,按以下步骤操作:

  1. 输入数据源将在目录中列出的名称

  2. 输入服务器 URL,格式为<account_identifier>.snowflakecomputing.com,例如orgname-accountname.snowflakecomputing.com。 详细了解 Snowflake 帐户标识符。 请注意,此 URL 用作 Snowflake 资产完全限定名称的一部分,并且是 Microsoft Purview 在扫描期间连接到 Snowflake 的默认终结点。

  3. 添加 其他主机 (如果适用)。 如果希望扫描操作连接到除服务器 URL 以外的 Snowflake 终结点,请指定它。 可以在扫描设置过程中选择主机进行连接。

    Tip

    如果您已经扫描了 Snowflake,但想改用另一个终结点,例如从公共终结点切换到专用终结点,则可以在数据源中添加另一个主机,并在扫描时选择该主机用于连接,以确保 Microsoft Purview 生成的资产与之前具有相同的完全限定名称。

    注册数据源时,Microsoft Purview 执行唯一性检查服务器 URL 和其他主机不会与任何现有源重叠。

  4. 从列表中选择一个集合。

  5. 完成数据源注册。

    Microsoft Purview 中 Snowflake 的“注册源”页的屏幕截图,其中包含名称、服务器 URL 和集合字段。

扫描

按照以下步骤扫描 Snowflake 以自动识别资产。 若要大致了解有关扫描的更多信息,请参阅扫描和引入简介

扫描身份验证

Snowflake 源支持的身份验证类型为 基本身份验证密钥对

按照以下流程配置密钥对凭据。

密钥对认证的先决条件

在开始之前,请确保具备:

  1. Snowflake Access

    1. 具有管理员权限的 Snowflake 帐户

    2. 用于 Microsoft Purview 扫描的用户账户(例如,purview_scanner)

    3. 执行 ALTER USER 命令的访问权限

  2. 工具 & 软件

    1. 已安装 OpenSSL(用于生成密钥)

    2. Azure CLI 或 PowerShell (密钥保管库操作)

    3. 访问 Microsoft Purview 门户

    4. 请确保已安装 Microsoft Open JDK 11。 下载 Microsoft Open JDK 11。 其他 JDK 变体可能与高级加密算法有问题。

分步配置

第 1 部分:Snowflake 配置

此步骤涉及创建公钥和私钥,然后在以下示例中将公钥分配给 purview 用户 (“purview_scanner”,) 连接到 Snowflake 以执行扫描。

步骤 1.1:生成 RSA 密钥对

  • 生成私钥

打开终端并生成私钥:

--For Encrypted Private Key (Recommended):  

openssl genrsa 2048 | openssl pkcs8 -topk8 -v2 aes-256-cbc -v2prf hmacWithSHA512 - inform PEM -out rsa_key.p8  

--Note: You'll be prompted to enter a passphrase. Remember this passphrase! 

OR

--For Unencrypted Private Key:  

openssl genrsa 2048 | openssl pkcs8 -topk8 -v2 aes-256-cbc -v2prf hmacWithSHA512 - inform PEM -out rsa_key.p8 -nocrypt 

注意:使用上述命令生成密钥

  • 生成公钥
openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub 
  • 提取公钥内容

查看和复制公钥内容, (不包括标头) :

cat rsa_key.pub 
-----BEGIN PUBLIC KEY----- 
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA... 
... -----END PUBLIC KEY----- 

复制 BEGIN 和 END 行之间的所有内容, (不包含分隔符行) 。

步骤 1.2:将公钥分配给 Snowflake 用户

连接到 Snowflake 并执行:

-- Create user if it doesn't exist 
CREATE USER IF NOT EXISTS purview_scanner 
  DEFAULT_ROLE = 'PUVRIEW_READER' 
  TYPE = 'SERVICE'  ; 
 -- Assign the public key (paste your key without the BEGIN/END lines) 
ALTER USER purview_scanner  
SET RSA_PUBLIC_KEY='MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...'; 
 -- Grant necessary privileges 
GRANT ROLE purview_reader TO USER purview_scanner; 
 -- Verify the fingerprint 
DESC USER purview_scanner; 

步骤 1.3:验证密钥配置 [可选验证步骤]

验证公共密钥指纹是否匹配:

在 Snowflake 中:

DESC USER purview_scanner ->> SELECT SUBSTR( 
(SELECT "value" FROM $1 
WHERE "property" = 'RSA_PUBLIC_KEY_FP'), 
LEN('SHA256:') + 1) AS key; 

在命令行中:

openssl rsa -pubin -in rsa_key.pub -outform DER | openssl dgst -sha256 -binary | openssl 
enc -base64 

请注意,两者都应生成相同的指纹哈希。

第 2 部分:Azure 密钥保管库设置

步骤 2.1:准备私钥内容

查看私钥:

cat rsa_key.p8 

复制整个内容,包括 -----BEGIN ENCRYPTED PRIVATE KEY----- 和 -----END ENCRYPTED PRIVATE KEY----- 行。

步骤 2.2:将机密存储在 Azure 密钥保管库

需要在 Azure 密钥保管库 中存储两个机密:

机密 1:私钥

关键要求必须使用 Azure CLI 或 Azure Cloud Shell 存储私钥。

请勿使用 Azure 门户 UI 创建私钥机密,因为:

  • Azure门户文本输入不保留多行格式

  • 它将换行符转换为空格,损坏 PEM 格式

  • Snowflake 连接将失败,并出现密钥格式错误

密码/密码短语机密可以通过门户创建(单行值)。

方法 1:Azure CLI (推荐)

# Replace with your values 
KEY_VAULT_NAME="your-keyvault-name"
CREDENTIAL_NAME="snowflake-purview-cred" 

# Store the private key from file (preserves multi-line format) 
az keyvault secret set \
 --vault-name $KEY_VAULT_NAME \
 --name "${CREDENTIAL_NAME}-privateKey" \
 --file rsa_key.p8 

OR

方法 2:使用 Azure CLI 的 PowerShell

# Read the private key preserving line breaks 
$privateKeyContent = Get-Content -Path "rsa_key.p8" -Raw 
 
# Store in Key Vault using Azure CLI 
az keyvault secret set ` 
  --vault-name "your-keyvault-name" ` 
  --name "snowflake-purview-cred-privateKey" ` 
  --value $privateKeyContent 

OR

上传后验证私钥格式:[可选步骤]

# Retrieve and check the secret maintains proper formatting 
az keyvault secret show \ 
  --vault-name $KEY_VAULT_NAME \ 
  --name "${CREDENTIAL_NAME}-privateKey" \ 
  --query value -o tsv 
 
# Expected output: Multiple lines like this 
# -----BEGIN ENCRYPTED PRIVATE KEY----- 
# MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQI... 
# (multiple lines of base64 encoded content) 
# ... 
# -----END ENCRYPTED PRIVATE KEY-----

正确:保留换行符的多行

错误:单一长行或带空格而不是换行符的文本

秘密 2:私钥口令

通行短语可使用 Azure 门户或 Azure CLI 创建(其值为单行)。

# Store the passphrase (if your key is encrypted) 
az keyvault secret set \
 --vault-name $KEY_VAULT_NAME \
 --name "${CREDENTIAL_NAME}-password" \
 --value "your_passphrase_here" 

重要: 如果使用 了未加密的 私钥,则仍需要创建 .password 机密,但将其设置为空字符串或占位符值。

使用 Azure 门户:

  1. 转到“机密”→“生成/导入

  2. 名称:snowflake-purview-cred.password

  3. 值:你的密码短语(对于未加密的密钥,则为空字符串)

  4. 选择 创建

创建并运行扫描

若要创建并运行新扫描,请执行以下步骤:

  1. 在经典的 Microsoft Purview 治理门户 中,导航到 “源”

  2. 选择已注册的 Snowflake 源。

  3. 选择+ 新建扫描

  4. 提供以下详细信息:

    1. 名称:扫描的名称

    2. 通过集成运行时进行连接:根据方案选择Azure自动解决的集成运行时、托管虚拟网络 IR 或 SHIR。 从为你的方案选择正确的集成运行时配置中了解详细信息。 若要使用托管虚拟网络 IR 通过专用链接连接到 Snowflake,请按照通过托管专用终结点连接到 Snowflake 中的步骤操作,首先设置专用终结点。

    3. 连接主机:选择在扫描期间用于与 Snowflake 建立连接的端点。 可以从服务器 URL 或 注册中配置的其他主机中进行选择。

    4. 凭据:选择用于连接到数据源的凭据。

      如果在创建凭据时使用 基本身份验证

      • 在“用户名”输入字段中提供用于连接到 Snowflake 的用户名。
      • 将用于连接到 Snowflake 的用户密码存储在密钥中。

      如果在创建凭据时使用密钥对

      • 提供用户名:purview_scanner(您的 Snowflake 用户名)

      • 密码密钥保管库参考:

      • 密钥保管库连接:选择密钥保管库

      • 机密名称:snowflake-purview-cred.password

      • 专用密钥保管库参考:
      • 密钥保管库连接:选择密钥保管库

      • 机密名称:snowflake-purview-cred.privateKey

    5. Warehouse:以大写形式指定用于支持扫描的仓库实例的名称。 凭据中指定用户的默认角色必须对该仓库具有 USAGE 权限。

    6. 数据库:以大写形式指定要导入的一个或多个数据库实例名称。 使用分号 (;) 分隔列表中的名称。 例如,DB1;DB2。 分配给凭据中指定的用户的默认角色必须对数据库对象具有足够的权限。

      备注

      如果指定了多个数据库实例名称,则不会对表应用分类。

      可接受的数据库名称模式可以是静态名称或包含通配符 %。 例如: A%;%B;%C%;D

      • 以 A 开头或
      • 以 B 结尾或
      • 包含 C 编程语言或
      • 等于 D
    7. 架构:列出要导入的架构子集,表示为分号分隔列表。 例如,schema1;schema2。 如果该列表为空,则会导入所有用户架构。 默认情况下,所有系统架构和对象都将被忽略。

      使用的可接受的架构名称模式可以是静态名称,也可以包含通配符 %。 例如: A%;%B;%C%;D

      • 以 A 开头或
      • 以 B 结尾或
      • 包含 C 编程语言或
      • 等于 D

      不能使用 NOT 和特殊字符。

    8. 存储过程详细信息:控制从存储过程导入的详细信息数:

      • 签名 (默认) :存储过程的名称和参数。
      • 代码、签名:存储过程的名称、参数和代码。
      • 世系、代码、签名:存储过程的名称、参数和代码,以及派生自代码的数据世系。
      • 无:不包含存储过程详细信息。

      备注

      如果使用自承载Integration Runtime进行扫描,则自版本 5.30.8541.1 起支持默认签名以外的自定义设置。 早期版本始终提取存储过程的名称和参数。

    9. 最大可用内存(适用于使用自承载集成运行时的情况):客户 VM 上可供扫描进程使用的最大内存(GB)。 这取决于需要扫描的 Snowflake 数据源规模。

      备注

      作为经验法则,为每 1000 个表提供 1GB 内存。

  5. 选择测试连接以验证设置(在使用 Azure Integration Runtime 时可用)。

  6. 选择 继续

  7. 选择用于分类的 扫描规则集 。 可以在系统默认规则集和现有自定义规则集之间进行选择,也可以内联 创建新的规则集 。 有关详细信息,请参阅 在 Microsoft Purview 中自动应用分类

    备注

    当表名、视图名称、架构名称或数据库名称包含特殊字符时,分类不会应用于表或视图。

    备注

    如果使用自承载运行时,则需要升级到版本 5.26.404.1 或更高版本才能使用 Snowflake 分类。 下载最新Microsoft Integration Runtime

  8. 选择 扫描触发器。 可以设置计划任务或运行一次扫描。

  9. 查看您的扫描结果,然后选择“保存并运行”。

查看扫描和扫描运行情况

若要查看现有扫描,请执行以下操作:

  1. 转到 Microsoft Purview 门户。 在左窗格中,选择“数据映射”。
  2. 选择数据源。 可以在“最近使用的扫描”下查看该数据源上的现有扫描列表,或者可以在“扫描”选项卡上查看所有扫描。
  3. 选择您想查看的扫描结果。 窗格会显示先前的所有扫描运行,以及每次扫描运行的状态和指标。
  4. 选择运行 ID 来查看 扫描运行详细信息

管理扫描

若要编辑、取消或删除扫描:

  1. 转到 Microsoft Purview 门户。 在左窗格中,选择“数据映射”。

  2. 选择数据源。 可以在“最近使用的扫描”下查看该数据源上的现有扫描列表,或者可以在“扫描”选项卡上查看所有扫描。

  3. 选择要管理的扫描。 然后你可以执行以下操作:

    • 请通过选择“编辑扫描”来进行编辑。
    • 通过选择“取消扫描运行”来取消正在进行的扫描。
    • 选择删除扫描以删除您的扫描。

备注

  • 删除您的扫描文件不会删除从以前的扫描中创建的目录条目。

通过托管专用终结点连接至 Snowflake

本部分介绍从 Microsoft Purview 到 Azure 上的 Snowflake 配置托管专用终结点 (PE) 所需的步骤。 详细了解Azure 专用链接和 Snowflake

  1. 在 Snowflake 帐户中,检索目标终结点和资源 ID。 使用 Account Admin 角色运行系统函数 SYSTEM$GET_PRIVATELINK_CONFIG(),并记下以下属性的值:

    • privatelink-pls-id
    • privatelink-account-url
    • regionless-privatelink-account-url
    • privatelink_ocsp-url
    use role accountadmin; 
    select key, value::varchar from table(flatten(input=>parse_json(SYSTEM$GET_PRIVATELINK_CONFIG())));
    
  2. 在 Microsoft Purview 中,创建一个连接到 Snowflake 的托管专用终结点。

    1. 按照以下步骤创建托管虚拟网络集成运行时。 如果已有,请确保它位于支持 Snowflake PE 的版本 2 中。
    2. 为 Snowflake 创建托管专用终结点。 导航到 托管专用终结点 ->+ 新建 ->Snowflake,并填写以下信息。
      • 资源 ID 或别名:填写检索到的 privatelink-pls-id 的值。
      • 完全限定域名:添加privatelink_ocsp-urlregionless-privatelink-account-urlprivatelink-account-url

    Microsoft Purview 中 Snowflake 的托管专用终结点创建页面的屏幕截图。

  3. 创建 PE 后,可以看到其预配状态为 “成功” ,审批状态为 “挂起”。 打开 PE 并在详细信息页中找到 托管专用终结点资源 ID

  4. 请联系 Snowflake 技术支持 并提供资源 ID,让 Snowflake 批准此 PE。

  5. Snowflake 支持团队确认 PE 已获得批准后,您应会在 Microsoft Purview 中看到托管专用终结点的审批状态为 已批准

  6. 注册数据源设置扫描。 设置扫描时,请选择与 Snowflake PE 关联的托管虚拟网络 IR。

故障排除提示

如果在注册或扫描 Snowflake 时遇到问题,请查看以下提示。

  • 在注册源这一步中检查您的账户标识符。 开头不要包含 https://
  • 确保扫描设置页上的仓库名称和数据库名称为大写。
  • 检查密钥保管库。 请确保密码中没有拼写错误。
  • 检查您在 Microsoft Purview 中设置的凭据。 指定的用户必须具有默认角色,该角色对仓库和要扫描的数据库具有必要的访问权限。 请参阅 扫描所需的权限。 使用 DESCRIBE USER; 验证为 Microsoft Purview 指定的用户的默认角色。
  • 使用 Snowflake 中的查询历史记录查看是否有任何活动发生。
    • 如果帐户标识符或密码有问题,则看不到任何活动。
    • 如果默认角色存在问题,至少应看到语句 USE WAREHOUSE . . .
    • 可以使用 QUERY_HISTORY_BY_USER 表函数 来确定连接正在使用的角色。 设置专用Microsoft Purview 用户可更轻松地进行故障排除。

密钥对身份验证故障排除

本部分涵盖了在 Microsoft Purview 中使用 Snowflake 密钥对身份验证时的常见连接问题。

问题 1:“测试连接失败”

症状:Purview 中的连接测试失败

可能的原因和解决方案:

  1. 未分配公钥

    1. 在 Snowflake 中验证:DESC USER purview_scanner;

    2. 检查是否已填充RSA_PUBLIC_KEY_FP

  2. 密钥保管库访问问题

    1. 验证托管标识是否具有“获取”和“列表”权限

    2. 检查密钥保管库防火墙设置

  3. 机密名称不正确

    1. 验证: {credentialName}.password 是否存在

    2. 验证: {credentialName}.privateKey 是否存在

问题 2:“私钥格式无效”或“连接失败,出现密钥错误”

症状:

  • 身份验证失败,出现“私钥格式无效”错误

  • 连接测试立即失败

  • 有关格式不正确的 PEM 或密钥分析错误的错误消息

常见原因:私钥通过Azure门户存储, (损坏的多行格式)

解决方案:

  1. 验证密钥格式是否已损坏:

    # Retrieve the secret and check format 
    az keyvault secret show \
     --vault-name your-keyvault \
     --name "snowflake-purview-cred-privateKey" \
     --query value -o tsv | head -5 
    
    # Should show multiple lines starting with: 
    # -----BEGIN ENCRYPTED PRIVATE KEY----- 
    # MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w... 
    # (NOT a single long line)
    
    
  2. 如果损坏,请使用 CLI 删除并重新创建:

    # Delete the corrupted secret az keyvault secret delete \
     --vault-name your-keyvault \
     --name "snowflake-purview-cred-privateKey" 
    
    # Wait for soft-delete purge (or purge immediately if needed) 
    az keyvault secret purge \
     --vault-name your-keyvault \
     --name "snowflake-purview-cred-privateKey" 
    
    # Recreate using CLI with
     --file parameter az keyvault secret set \
     --vault-name your-keyvault \
     --name "snowflake-purview-cred-privateKey" \
     --file rsa_key.p8
    
  3. 其他检查:

    1. 确保私钥采用 PKCS#8 PEM 格式

    2. 包括 -----BEGIN ENCRYPTED PRIVATE KEY----- 和 -----END ENCRYPTED PRIVATE KEY----- 行

    3. 首先在本地验证密钥:

    openssl rsa -in rsa_key.p8 -check
    

请记住:始终对私钥机密使用 Azure CLI 或Cloud Shell,切勿使用 Azure 门户 UI。

问题 3:“公钥指纹不匹配”

症状:身份验证成功,但使用了错误的密钥

解决方案:

# Regenerate public key from private key 
openssl rsa -in rsa_key.p8 -pubout -out rsa_key_new.pub 

# Verify fingerprint 
openssl rsa -pubin -in rsa_key_new.pub -outform DER | openssl dgst sha256 -binary | openssl enc -base64 

# Update in Snowflake 
ALTER USER purview_scanner SET RSA_PUBLIC_KEY='';

问题 4:“通行短语不正确”

症状: 密钥解密失败

解决方案

  1. 验证密钥保管库中的通行短语是否与密钥生成期间使用的通行短语匹配

  2. 在本地测试通行短语:

openssl rsa -in rsa_key.p8 -check 
# Enter passphrase when prompted

问题 5:“缺少 Snowflake 权限”

症状:连接成功,但扫描失败

解决方案

向 Snowflake 用户授予所需的权限:

-- Create role for Purview 
CREATE ROLE IF NOT EXISTS purview_reader; 

-- Grant usage on warehouse 
GRANT USAGE ON WAREHOUSE COMPUTE_WH TO ROLE purview_reader; 

-- Grant usage on database  
GRANT USAGE ON DATABASE my_database TO ROLE purview_reader; 

-- Grant usage on all schemas  
GRANT USAGE ON ALL SCHEMAS IN DATABASE my_database TO ROLE  purview_reader; 

-- Grant select on all tables  
GRANT SELECT ON ALL TABLES IN DATABASE my_database TO ROLE  purview_reader;  
GRANT SELECT ON FUTURE TABLES IN DATABASE my_database TO ROLE  purview_reader; 

-- Grant select on all views  
GRANT SELECT ON ALL VIEWS IN DATABASE my_database TO ROLE  purview_reader;  
GRANT SELECT ON FUTURE VIEWS IN DATABASE my_database TO ROLE  purview_reader; 

-- Assign role to user  
GRANT ROLE purview_reader TO USER purview_scanner; 

-- Set as default role  
ALTER USER purview_scanner SET DEFAULT_ROLE = purview_reader;

注册数据源后,请使用以下资源详细了解 Microsoft Purview 和你的数据。