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 で同じエクスペリエンスが発生することがわかりました。
それでは、部分的に:
- これは、ACL を使用してアクセスを許可する正しいパターンですか、それとも別の方法を使用する必要がありますか?
- ACL をサポートするために有効にする必要があるストレージ アカウントまたはクエリ/ノートブック内の設定はありますか?*
- Synapse Workspace はまだプレビュー段階ですが、ACL は現在までに Synapse Workspace に実装されていますか?
*この問題に何が関連していて、何がまったく関係がないのか本当にわからないので、設定全体を貼り付けることに抵抗しましたが、もちろん提供できます.