次の方法で共有


PolyBase からマネージド ID を使用して Azure Storage に接続する

適用対象: SQL Server 2025 (17.x) 以降のバージョン

SQL Server 2025 (17.x) 以降では、 マネージド ID を 使用して次の Azure リソースにアクセスできます。

  • Azure Blob Storage
  • Azure Data Lake

[前提条件]

Azure VM 上の SQL Server の場合

必要な手順を完了したら、2 つの新しいレジストリ エントリを追加します。 これらのレジストリ エントリは、Azure Virtual Machines 上の SQL Server に対してのみ必要です。 Azure Arc によって有効になっている SQL Server インスタンスの場合、これらのエントリは自動的に作成されます。

レジストリで、 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL17.MSSQLSERVER\MSSQLServer\FederatedAuthentication サブキーを更新します。

注意事項

レジストリを誤って編集すると、システムが深刻な損傷を受ける可能性があります。 レジストリを変更する前に、コンピューター上のすべての重要なデータをバックアップしてください。

次のエントリを作成します。

エントリ 価値
AADAzureStorageEndPoint storage.azure.com
AADDataLakeEndPoint datalake.azure.net

データベース範囲の資格情報を作成する

マネージド ID のデータベース スコープ資格情報を追加します。

  1. サーバースコープのデータベース資格情報を有効にします。 次の Transact-SQL クエリを実行します。

    EXECUTE sp_configure 'allow server scoped db credentials', 1;
    GO
    RECONFIGURE;
    
  2. データベース スコープ資格情報を作成します。 この例では、 managed_id名前を使用します。

    CREATE DATABASE SCOPED CREDENTIAL [managed_id]
    WITH IDENTITY = 'Managed Identity';
    

外部データ ソースを作成する

次の設定で外部データ ソースを作成します。

  • コネクタの場所のプレフィックス

    • abs
  • ロケーションパス

    • abs://<container_name>@<storage_account_name>.blob.core.windows.net/、または
    • abs://<storage_account_name>.blob.core.windows.net/<container_name>
  • 製品またはサービスによってサポートされる場所

    • Azure Arc で有効になっている SQL Server 2025 (17.x)
    • SQL Server 2022 (16.x): 階層型名前空間がサポートされています
  • 認証

    • Shared Access Signature (SAS)、または
    • マネージド ID

Azure Blob Storage の Parquet ファイルに対してクエリを実行する

SQL Server 2025 (17.x) では、Azure Arc を介したマネージド ID がサポートされています。手順については、 Azure Arc で有効になっている SQL Server のマネージド ID に関するページを参照してください。

次の例では、Azure Blob Storage 内の Parquet ファイルに対してクエリを実行します。

EXECUTE sp_configure 'allow server scoped db credentials', 1;
RECONFIGURE;
GO

CREATE DATABASE SCOPED CREDENTIAL [managed_id]
WITH IDENTITY = 'Managed Identity';

CREATE EXTERNAL DATA SOURCE [my_external_data_source]
WITH (
    LOCATION = 'abs://<container>@<storage_account_name>.blob.core.windows.net/',
    CREDENTIAL = managed_id
);

エラーと解決策

外部テーブルにアクセスできません (エラー 16562)

前提条件がない場合は、Azure Blob Storage または Azure Data Lake にアクセスしようとすると、エラー 16562 が発生する可能性があります。

Msg 16562, Level 16, State 1, Line 79
External table <name> is not accessible because location does not exist or it is used by another process.

次の項目を確認します。

  • SQL Server インスタンスは、Azure Arc 用に適切に構成されています。詳細については、「 Azure Arc で有効になっている SQL Server のマネージド ID」を参照してください。

  • 必要なレジストリ エントリが存在します。

  • allow server scoped db credentials サーバー構成オプションが有効になっています。

ファイルを開けません (エラー 13822)

マネージド ID にストレージ アカウントに対するアクセス許可がない場合、またはストレージへのネットワーク アクセスがブロックされている場合、Azure Blob Storage または Azure Data Lake にアクセスすると、エラー 13822 が発生する可能性があります。

Msg 13822, Level 16, State 1, Line 9
File <file> cannot be opened because it does not exist or it is used by another process.

次の項目を確認します。

  • マネージド ID にはストレージ コンテナーへのアクセス許可がありますか?
  • マネージド ID は SQL Server の外部のストレージ コンテナーにアクセスできますか?
  • ファイルは排他的にロックされていますか?