Tabel maken mislukt met beveiligingsuitzondering

Probleem

U probeert een tabel te maken met behulp van een cluster met tabel-ACL's ingeschakeld, maar de volgende fout treedt op:

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

Oorzaak

Deze fout treedt op in een cluster met tabel-ACL als u geen beheerder bent en u niet voldoende bevoegdheden hebt om een tabel te maken.

In uw notebook probeert u bijvoorbeeld een tabel te maken met behulp van een Parquet-gegevensbron in Azure Blob Storage:

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

Oplossing

U moet uw beheerder vragen om u toegang te verlenen tot het bestandssysteem voor blobopslagmet behulp van een van de volgende opties. Als een beheerder u geen toegang kan verlenen tot het gegevensobject, moet u een beheerder vragen om de tabel voor u te maken.

  • Als u een instructie wilt gebruiken om de tabel te maken, moet de beheerder u bevoegdheden CTAS (CREATE TABLE AS SELECT) SELECT verlenen voor het bestandssysteem:

    GRANT SELECT ON ANY FILE TO `user1`
    

    Voorbeeld van een CTAS-instructie:

    CREATE TABLE mytable
          AS SELECT * FROM parquet.`wasbs://my-container@my-storage-account.blob.core.windows.net/my-table`
    
  • Als u een instructie wilt gebruiken om de tabel te maken, moet de beheerder uw bevoegdheden verhogen door naast te CTOP (CREATE TABLE OPTIONS PATH) MODIFY SELECT verlenen.

    GRANT SELECT, MODIFY ON ANY FILE TO `user1`
    

    Voorbeeld CTOP van instructie:

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

Belangrijk

Het is belangrijk om inzicht te krijgen in de gevolgen voor de beveiliging van het ANY FILE verlenen van machtigingen aan een bestandssysteem. U moet alleen verlenen ANY FILE aan bevoegde gebruikers. Gebruikers met lagere bevoegdheden voor het cluster mogen nooit toegang krijgen tot gegevens door te verwijzen naar een werkelijke opslaglocatie. In plaats daarvan moeten ze toegang hebben tot gegevens uit tabellen die zijn gemaakt door bevoegde gebruikers, zodat table ACLS wordt afgedwongen.

Als bestanden in de hoofdmap van Azure Databricks en gegevens buckets toegankelijk zijn voor het cluster en gebruikers bevoegdheden hebben, moet de beheerder bovendien de MODIFY DBFS-hoofdmap vergrendelen.

Als u de hierboven beschreven machtigingen voor gegevenstoegang verleent, worden onderliggende gebruikersmachtigingen of blob-Storage containertoegangsbeheer niet overschreven. Als bijvoorbeeld een toekenningsverklaring zoals user1''' wordt uitgevoerd, maar een gebruikersmachtiging die is gekoppeld aan het cluster, expliciet leesmachtigingen voor de doelcontainer afkeert, worden met de instructie GRANT de container of de objecten in de container plotseling niet GRANT SELECT, MODIFY ON ANY FILE TO leesbaar.