問題点: テーブルの作成がセキュリティ例外で失敗するProblem: Table Creation Fails with Security Exception

問題点Problem

テーブル aclが有効になっているクラスターを使用してテーブルを作成しようとしましたが、次のエラーが発生しました。You attempt to create a table using a cluster that has Table ACLs enabled, but the following error occurs:

Error in SQL statement: SecurityException: User does not have permission SELECT on any file.

原因Cause

このエラーは、管理者ではなく、テーブルを作成するための十分な権限がない場合に、テーブルの ACL が有効なクラスターで発生します。This error occurs on a Table ACL-enabled cluster if you are not an administrator and you do not have sufficient privileges to create a table.

たとえば、notebook で Azure Blob Storage にある Parquet データソースを使用してテーブルを作成しようとするとします。For example, in your notebook you attempt to create a table using a Parquet data source located on Azure Blob Storage:

CREATE TABLE mytable
  USING PARQUET
  OPTIONS (PATH='wasbs://my-container@my-storage-account.blob.core.windows.net/my-table')

ソリューションSolution

次のいずれかのオプションを使用して、 blob ストレージファイルシステムへのアクセス権を管理者に付与する必要があります。You should ask your administrator to grant you access to the blob storage filesystem, using either of the following options. 管理者がデータオブジェクトへのアクセスを許可できない場合は、管理者に依頼してテーブルを作成する必要があります。If an administrator cannot grant you access to the data object, you’ll have to ask an administrator to make the table for you.

  • CTAS (CREATE TABLE AS SELECT) ステートメントを使用してテーブルを作成する場合は、管理者がファイルシステムに対する SELECT の特権を付与する必要があります。If you want to use a CTAS (CREATE TABLE AS SELECT) statement to create the table, the administrator should grant you SELECT privileges on the filesystem:

    GRANT SELECT ON ANY FILE TO `user1`
    

    CTAS ステートメントの例:Example CTAS statement:

    CREATE TABLE mytable
          AS SELECT * FROM parquet.`wasbs://my-container@my-storage-account.blob.core.windows.net/my-table`
    
  • CTOP (CREATE TABLE OPTIONS PATH) ステートメントを使用してテーブルを作成する場合、管理者は SELECTに加えて MODIFY を許可することによって特権を昇格させる必要があります。If you want to use a CTOP (CREATE TABLE OPTIONS PATH) statement to make the table, the administrator must elevate your privileges by granting MODIFY in addition to SELECT.

    GRANT SELECT, MODIFY ON ANY FILE TO `user1`
    

    CTOP ステートメントの例:Example CTOP statement:

    CREATE TABLE mytable
       USING PARQUET
       OPTIONS (PATH='wasbs://my-container@my-storage-account.blob.core.windows.net/my-table')
    

重要

ANY FILE のアクセス許可をファイルシステムに付与することによるセキュリティへの影響について理解しておくことが重要です。It is important to understand the security implications of granting ANY FILE permissions on a filesystem. ANY FILE は、特権を持つユーザーにのみ付与してください。You should only grant ANY FILE to privileged users. クラスターに対して低い特権を持つユーザーは、実際の記憶域の場所を参照することによってデータにアクセスすることはできません。Users with lower privileges on the cluster should never access data by referencing an actual storage location. 代わりに、特権ユーザーによって作成されたテーブルのデータにアクセスして、テーブルの ACL を確実に適用する必要があります。Instead, they should access data from tables that are created by privileged users, thus ensuring that Table ACLS are enforced.

さらに、Azure Databricks ルートとデータバケット内のファイルがクラスターからアクセス可能で、ユーザーに MODIFY 特権がある場合、管理者は DBFS ルートをロックダウンする必要があります。In addition, if files in the Azure Databricks root and data buckets are accessible by the cluster and users have MODIFY privileges, the admin should lock down the DBFS root.

前に説明したデータアクセス特権を付与しても、基になるユーザーのアクセス許可やコンテナーのアクセス制御 Blob Storage は置き換えられません。Granting the data access privileges described above does not supersede any underlying user permissions or Blob Storage container access control. たとえば、GRANT SELECT, MODIFY ON ANY FILE TOuser1 ' ' のような grant ステートメントが実行されても、クラスターにアタッチされたユーザーのアクセス許可によってターゲットコンテナーへの読み取りが明示的に拒否された場合、GRANT ステートメントはコンテナーまたはコンテナー内のオブジェクトを突然作成しません。できる.For example, if a grant statement like GRANT SELECT, MODIFY ON ANY FILE TOuser1`` is executed but a user permission attached to the cluster explicitly denies reads to the target container, then the GRANT statement will not make the container or the objects within the container suddenly readable.