Échec de la création d’une table avec une exception de sécuritéTable creation fails with security exception

ProblèmeProblem

Vous tentez de créer une table à l’aide d’un cluster dont les listes de contrôle d’accès de table sont activées, mais l’erreur suivante se produit :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.

CauseCause

Cette erreur se produit sur un cluster avec liste de contrôle d’accès de table si vous n’êtes pas administrateur et que vous ne disposez pas des privilèges suffisants pour créer une table.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.

Par exemple, dans votre bloc-notes, vous tentez de créer une table à l’aide d’une source de données parquet située dans le stockage d’objets BLOB Azure :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')

SolutionSolution

Vous devez demander à votre administrateur de vous accorder l’accès au système de fichiers BLOB Storage, à l’aide de l’une des options suivantes.You should ask your administrator to grant you access to the blob storage filesystem, using either of the following options. Si un administrateur ne peut pas vous accorder l’accès à l’objet de données, vous devez demander à un administrateur de créer la table pour vous.If an administrator cannot grant you access to the data object, you’ll have to ask an administrator to make the table for you.

  • Si vous souhaitez utiliser une CTAS (CREATE TABLE AS SELECT) instruction pour créer la table, l’administrateur doit vous accorder SELECT des privilèges sur le système de fichiers :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`
    

    Exemple d’instruction CTAS :Example CTAS statement:

    CREATE TABLE mytable
          AS SELECT * FROM parquet.`wasbs://my-container@my-storage-account.blob.core.windows.net/my-table`
    
  • Si vous souhaitez utiliser une CTOP (CREATE TABLE OPTIONS PATH) instruction pour créer la table, l’administrateur doit élever vos privilèges en accordant MODIFY en plus de SELECT .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`
    

    Exemple d' CTOP instruction :Example CTOP statement:

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

Important

Il est important de comprendre les implications en matière de sécurité de l’octroi d' ANY FILE autorisations sur un système de fichiers.It is important to understand the security implications of granting ANY FILE permissions on a filesystem. Vous devez accorder uniquement ANY FILE aux utilisateurs privilégiés.You should only grant ANY FILE to privileged users. Les utilisateurs avec des privilèges inférieurs sur le cluster ne doivent jamais accéder aux données en référençant un emplacement de stockage réel.Users with lower privileges on the cluster should never access data by referencing an actual storage location. Au lieu de cela, ils doivent accéder aux données des tables créées par des utilisateurs privilégiés, garantissant ainsi la mise en œuvre des listes de contrôle d’accès de table.Instead, they should access data from tables that are created by privileged users, thus ensuring that Table ACLS are enforced.

En outre, si les fichiers de la racine Azure Databricks et les compartiments de données sont accessibles par le cluster et que les utilisateurs ont MODIFY des privilèges, l’administrateur doit verrouiller la racine 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.

L’octroi de privilèges d’accès aux données décrit ci-dessus ne remplace pas les autorisations utilisateur sous-jacentes ou le contrôle d’accès au conteneur de stockage d’objets BLOB.Granting the data access privileges described above does not supersede any underlying user permissions or Blob Storage container access control. Par exemple, si une instruction GRANT telle que GRANT SELECT, MODIFY ON ANY FILE TO User1 ' ' 'est exécutée alors qu’une autorisation utilisateur attachée au cluster refuse explicitement des lectures au conteneur cible, l’instruction' 'Grant’ne rend pas le conteneur ou les objets au sein du conteneur soudainement lisibles.For example, if a grant statement like GRANT SELECT, MODIFY ON ANY FILE TO user1``` 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.