サーバーレス SQL プールの同期済みオブジェクトに対するアクセス制御の設定方法

Azure Synapse Analytics では、Spark データベーステーブルはサーバーレス SQL プールと共有されます。 Spark を使用して作成された Lake データベースParquet、および CSV でサポートされているテーブルは、サーバーレス SQL プールで自動的に使用できます。 この機能により、サーバーレス SQL プールを使用して、Spark プールを使用して準備されたデータを探索したり、それらのデータに対してクエリを実行したりできます。 次の図に、この機能を使用するためのアーキテクチャの概要を示します。 まず、Azure Synapse Pipelines が、オンプレミス (またはその他) のストレージから Azure Data Lake Storage にデータを移動します。 これにより、Spark はデータのエンリッチ、データベースの作成、およびサーバーレス Synapse SQL に同期されるテーブルの作成を実行できるようになります。 その後、ユーザーは、エンリッチされたデータに対してアドホック クエリを実行したり、そのデータを Power BI に提供したりできます。

Enrich in Spark, serve with SQL diagram.

完全な管理者アクセス (sysadmin)

これらのデータベースとテーブルが Spark からサーバーレス SQL プールに同期されれば、サーバーレス SQL プール内のこれらの外部テーブルを使用して、同じデータにアクセスできます。 ただし、Spark プール オブジェクトとの一貫性を維持するため、サーバーレス SQL プール内のオブジェクトは読み取り専用です。 この制限により、Synapse SQL 管理者か Synapse 管理者のロールを持つユーザーのみが、サーバーレス SQL プール内のこれらのオブジェクトにアクセスできます。 管理者以外のユーザーが同期されたデータベース/テーブルに対してクエリを実行しようとすると、次のようなエラーが発生します。External table '<table>' is not accessible because content of directory cannot be listed. (管理者以外のユーザーが基になるストレージ アカウントのデータへのアクセス権を持つ場合を除く)。

サーバーレス SQL プール内の同期されたデータベースは読み取り専用であるため、変更することはできません。 ユーザーを作成しようとしたり、他のアクセス許可を付与しようとしたりすると、失敗します。 同期されたデータベースを読み取るには、サーバーレベルの特権アクセス許可 (sysadmin など) が必要です。 この制限は、Dataverse 用の Azure Synapse Link やレイク データベース テーブルを使用する際の、サーバーレス SQL プール内の外部テーブルについても存在します。

同期されたデータベースへの管理者以外のアクセス

通常、データの読み取りとレポートの作成を必要とするユーザーには、完全な管理者アクセス権 (sysadmin) が与えられていません。 このユーザーは、通常、既存のテーブルを使用してデータの読み取りと分析のみを行う必要があるデータ アナリストです。 これらのユーザーは、新しいオブジェクトを作成する必要はありません。

最小限のアクセス許可を持つユーザーは、次のことを行える必要があります。

  • Spark からレプリケートされるデータベースに接続する
  • 外部テーブルを介してデータを選択し、基になる ADLS データにアクセスする

以下のコード スクリプトを実行すると、管理者以外のユーザーはサーバーレベルのアクセス許可を取得して、任意のデータベースに接続できるようになります。 また、テーブルやビューなど、スキーマレベルのすべてのオブジェクトのデータを表示することもできます。 データ アクセス セキュリティは、ストレージ層で管理できます。

-- Creating Azure AD login (same can be achieved for Azure AD app)
    CREATE LOGIN [login@contoso.com] FROM EXTERNAL PROVIDER;
    go;
    
    GRANT CONNECT ANY DATABASE to [login@contoso.com];
    GRANT SELECT ALL USER SECURABLES to [login@contoso.com];
    GO;

注意

これらのステートメントはすべてサーバー レベルのアクセス許可であるため、マスター データベースで実行する必要があります。

ログインを作成し、アクセス許可を許可すると、ユーザーは、同期された外部テーブルに対してクエリを実行できるようになります。 この軽減策は、Microsoft Entra セキュリティ グループにも適用できます。

そのオブジェクトに対する強化されたセキュリティは、特定のスキーマを使用して管理でき、そのセキュリティで特定のスキーマへのアクセスをロックできます。 この回避策には、追加の DDL が必要です。 このシナリオでは、ADLS 上の Spark テーブル データを指す新しいサーバーレス データベース、スキーマ、およびビューを作成できます。

ストレージ アカウント上のデータへのアクセスは、ACL か、Microsoft Entra ユーザー/グループの通常の Storage BLOB データ所有者/閲覧者/共同作成者ロールを使用して管理できます。 サービス プリンシパル (Microsoft Entra アプリ) の場合は、ACL セットアップを使用する必要があります。

Note

  • データ上で OPENROWSET を使用できないようにするには、DENY ADMINISTER BULK OPERATIONS to [login@contoso.com]; を使用できます。詳細については、DENY (サーバーのアクセス許可の拒否) に関する記事を参照してください。
  • 特定のスキーマの使用を禁じるには、DENY SELECT ON SCHEMA::[schema_name] TO [login@contoso.com]; を使用できます。詳細については、DENY (スキーマ アクセス許可の拒否) に関する記事を参照してください。

次の手順

詳細については、「SQL 認証」を参照してください。