創建表失敗,出現安全異常

了解當表創建失敗並出現安全異常時該怎麼做。

寫的亞當Pavlacka

最後發布日期:2022年5月17日

問題

您嚐試使用啟用了表acl的集群創建表,但出現以下錯誤:

SQL語句錯誤:SecurityException:用戶沒有權限選擇任何文件。

導致

如果您不是管理員,並且沒有足夠的權限創建表,則會在啟用表acl的集群上發生此錯誤。

AWS

例如,在您的筆記本中,您嚐試使用位於S3上的Parquet數據源創建一個表:

CREATE TABLE mytable USING PARQUET OPTIONS (PATH='s3://my-root bucket/subfolder/my-table')
刪除

Azure

例如,在您的筆記本中,您嚐試使用位於Azure Blob Storage上的Parquet數據源創建一個表:

創建表mytable USING PARQUET OPTIONS (PATH='wasbs://my-container@my-storage-account.blob.core.windows.net/my-table')
刪除

解決方案

您應該要求管理員授予您訪問blob存儲文件係統的權限,可以使用以下選項之一。如果管理員不能授予您對數據對象的訪問權限,則必須請求管理員為您創建表。

  • 如果你想用創建表為select語句創建表時,管理員應授予您權限選擇文件係統上的特權:
    授予“user1”任意文件的選擇權限
  • 例子商品交易顧問基金聲明:

AWS

' s3://my-root-bucket/subfolder/my-table '
刪除

Azure

CREATE TABLE mytable AS SELECT * FROM parquet. ' wasbs://my-container@my-storage-account.blob.core.windows.net/my-table '
刪除
  • 如果你想用Ctop(創建表選項路徑)語句要使表生效,管理員必須通過授予來提升您的權限修改除了選擇
    授予用戶user1任意文件的選擇、修改權限
    例子CTOP聲明:

AWS

CREATE TABLE mytable USING PARQUET OPTIONS (PATH='s3://my-root bucket/subfolder/my-table')
刪除

Azure

創建表mytable USING PARQUET OPTIONS (PATH='wasbs://my-container@my-storage-account.blob.core.windows.net/my-table')
刪除
刪除

警告

理解在文件係統上授予ANY FILE權限的安全含義是很重要的。您應該隻向特權用戶授予ANY FILE。在集群上具有較低權限的用戶永遠不應該通過引用實際存儲位置來訪問數據。相反,它們應該訪問由特權用戶創建的表中的數據,從而確保執行表acl。

此外,如果Databricks根桶和數據桶中的文件可以被集群訪問,且用戶具有MODIFY權限,管理員應該鎖定根桶。

AWS

授予上述數據訪問權限不會取代任何底層IAM角色或S3桶策略。例如,如果一個撥款聲明像授權用戶1選擇、修改任何文件如果集群上的IAM角色顯式拒絕讀取目標S3桶,則格蘭特語句不會使桶或桶內的對象突然可讀。

刪除

Azure

授予上麵描述的數據訪問權限不會取代任何底層用戶權限或Blob Storage容器訪問控製。例如,如果一個撥款聲明像授權用戶1選擇、修改任何文件執行,但附加到集群的用戶權限顯式拒絕讀取目標容器,則格蘭特語句不會使容器或容器內的對象突然可讀。

刪除