Error al crear la tabla con una excepción de seguridad

Problema

Intenta crear una tabla mediante un clúster que tiene habilitadas las ACL de tabla , pero se produce el siguiente error:

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

Causa

Este error se produce en un clúster habilitado para ACL de tabla si no es administrador y no tiene privilegios suficientes para crear una tabla.

Por ejemplo, en el Bloc de notas se intenta crear una tabla mediante un origen de datos de parquet ubicado en Azure Blob Storage:

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

Solución

Debe pedir al administrador que le conceda acceso al sistema de archivos de almacenamiento de blobsmediante cualquiera de las siguientes opciones. Si un administrador no puede concederle acceso al objeto de datos, tendrá que pedir a un administrador que haga la tabla.

  • Si desea utilizar una CTAS (CREATE TABLE AS SELECT) instrucción para crear la tabla, el administrador debe concederle SELECT privilegios en el sistema de archivos:

    GRANT SELECT ON ANY FILE TO `user1`
    

    Ejemplo de la instrucción CTAS:

    CREATE TABLE mytable
          AS SELECT * FROM parquet.`wasbs://my-container@my-storage-account.blob.core.windows.net/my-table`
    
  • Si desea utilizar una CTOP (CREATE TABLE OPTIONS PATH) instrucción para crear la tabla, el administrador debe conceder los privilegios, MODIFY además de SELECT .

    GRANT SELECT, MODIFY ON ANY FILE TO `user1`
    

    Instrucción de ejemplo CTOP :

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

Importante

Es importante comprender las implicaciones de seguridad de conceder ANY FILE permisos en un sistema de archivos. Solo debe conceder ANY FILE a usuarios con privilegios. Los usuarios con privilegios inferiores en el clúster nunca deben tener acceso a los datos haciendo referencia a una ubicación de almacenamiento real. En su lugar, deben tener acceso a los datos de las tablas creadas por usuarios con privilegios, con lo que se garantiza que se aplican las ACL de la tabla.

Además, si el clúster tiene acceso a los archivos de la raíz de Azure Databricks y los cubos de datos, los usuarios tienen privilegios, por lo que MODIFY el administrador debe bloquear la raíz DBFS.

La concesión de los privilegios de acceso a datos descritos anteriormente no sustituye a ninguno de los permisos de usuario subyacentes ni Blob Storage Control de acceso a contenedores. Por ejemplo, si se ejecuta una instrucción Grant como GRANT SELECT, MODIFY ON ANY FILE TO user1 ' ' ' pero un permiso de usuario asociado al clúster deniega explícitamente las lecturas al contenedor de destino, la instrucción ' ' Grant ' no hará que el contenedor o los objetos dentro del contenedor sean de repente lectura.