2

Gen2 Data Lake コンテナーの寄木細工のファイルへのアクセスを許可しようとしています。コンテナーに所有者 RBAC がありますが、他のユーザーのコンテナーへのアクセスを制限したいと考えています。

私のクエリは非常に単純です:

SELECT
  TOP 100 *
FROM
  OPENROWSET(
    BULK 'https://aztsworddataaipocacldl.dfs.core.windows.net/pocacl/Top/Sub/part-00006-c62926ba-c530-4ad8-87d1-cf38c67a2da3-c000.snappy.parquet',
    FORMAT='PARQUET'
  ) AS [result]

これを実行すると、接続に問題はありません。ファイルに ACL 権限を追加しようとしました (もちろん、「Top」と「Sub」を含むフォルダー)。

ストレージ エクスプローラーを使用して 'トップ' フォルダーに RWX を指定し、デフォルトで 'サブ' フォルダーにカスケードし、ファイルを追加すると寄木細工のファイルになります。

同僚が SQL スクリプトを実行しようとすると、エラー メッセージが表示されます。Failed to execute query. Error: File 'https://aztsworddataaipocacldl.dfs.core.windows.net/pocacl/Top/Sub/part-00006-c62926ba-c530-4ad8-87d1-cf38c67a2da3-c000.snappy.parquet' cannot be opened because it does not exist or it is used by another process. NB 同様の結果が Spark でも発生しますが、代わりに 403 が発生します

SQL オンデマンドは 、エラーの後に次のヘルプ ファイルへのリンクを提供します。

「ファイルが存在しないか、別のプロセスで使用されているため、ファイルを開くことができません」というエラーでクエリが失敗し、両方のファイルが存在し、別のプロセスで使用されていないことが確実な場合は、SQL オンデマンドができないことを意味します。ファイルにアクセスします。この問題は通常、Azure Active Directory ID にファイルへのアクセス権がないために発生します。既定では、SQL オンデマンドは Azure Active Directory ID を使用してファイルにアクセスしようとします。この問題を解決するには、ファイルにアクセスするための適切な権限が必要です。最も簡単な方法は、クエリを実行しようとしているストレージ アカウントに対する "ストレージ BLOB データ共同作成者" ロールを自分自身に付与することです。

Storage Blob Data Contributor または Storage Blob Data Reader を許可したくありません。これにより、エンド ユーザーにクエリを実行させたいファイルだけでなく、コンテナー上のすべてのファイルにアクセスできるようになります。寄木細工の外部テーブルに接続する SSMS で同じエクスペリエンスが発生することがわかりました。

それでは、部分的に:

  1. これは、ACL を使用してアクセスを許可する正しいパターンですか、それとも別の方法を使用する必要がありますか?
  2. ACL をサポートするために有効にする必要があるストレージ アカウントまたはクエリ/ノートブック内の設定はありますか?*
  3. Synapse Workspace はまだプレビュー段階ですが、ACL は現在までに Synapse Workspace に実装されていますか?

*この問題に何が関連していて、何がまったく関係がないのか本当にわからないので、設定全体を貼り付けることに抵抗しましたが、もちろん提供できます.

4

2 に答える 2