Ett fel inträffar när tabellen skapas med ett säkerhetsundantag

Problem

Du försöker skapa en tabell med ett kluster med aktiverade tabell åtkomst kontrol listor , men följande fel inträffar:

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

Orsak

Det här felet uppstår i ett tabell-ACL-aktiverat kluster om du inte är administratör och du inte har behörighet att skapa en tabell.

I din bärbara dator försöker du till exempel skapa en tabell med en Parquet-data källa som finns på Azure Blob Storage:

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

Lösning

Be administratören att ge dig åtkomst till Blob Storage-fil systemetmed något av följande alternativ. Om en administratör inte kan ge dig åtkomst till dataobjektet måste du be en administratör att skapa tabellen åt dig.

  • Om du vill använda en CTAS (CREATE TABLE AS SELECT) instruktion för att skapa tabellen, ska administratören bevilja SELECT behörighet för fil systemet:

    GRANT SELECT ON ANY FILE TO `user1`
    

    Exempel på CTAS-instruktion:

    CREATE TABLE mytable
          AS SELECT * FROM parquet.`wasbs://my-container@my-storage-account.blob.core.windows.net/my-table`
    
  • Om du vill använda en CTOP (CREATE TABLE OPTIONS PATH) instruktion för att skapa tabellen måste administratören höja dina privilegier genom MODIFY att bevilja tillägg SELECT .

    GRANT SELECT, MODIFY ON ANY FILE TO `user1`
    

    Exempel på CTOP uttryck:

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

Viktigt

Det är viktigt att förstå säkerhets konsekvenserna av att bevilja ANY FILE behörigheter för ett fil system. Du bör endast bevilja ANY FILE privilegierade användare. Användare med lägre privilegier i klustret ska aldrig komma åt data genom att referera till en faktisk lagrings plats. De bör istället ha åtkomst till data från tabeller som skapats av privilegierade användare, vilket säkerställer att tabell åtkomst kontrol listor tillämpas.

Om filerna i Azure Databricks roten och data Bucket är tillgängliga av klustret och användarna har MODIFY behörighet bör administratören låsa DBFS-roten.

Om du beviljar behörighet för data åtkomst som beskrivs ovan ersätts inte eventuella underliggande användar behörigheter eller Blob Storage åtkomst kontroll för behållare. Om t. ex. en Grant-instruktion som GRANT SELECT, MODIFY ON ANY FILE TO Användare1 ' ' körs men en användar behörighet som är kopplad till klustret uttryckligen nekar läsningar till mål containern GRANT kommer instruktionen inte att göra behållaren eller objekten i behållaren plötsligt läsbar.