你好,
我隻是接觸,看看誰有信息或可以點我一個有用的方向。我需要連接到雪花從Azure磚使用連接器:https://learn.microsoft.com/en-us/azure/databricks/external-data/snowflake
連接器要求用戶將他們的用戶名和密碼連接細節(或在一個秘密的商店),然而這些雪花用戶和證書雪花帳戶配置為使用SSO Azure的國內流離失所者。
透過雪花的文檔JDBC連接器連接器的工作使用SSO時您需要配置:
.option(“身份”、“externalbrowser”)
和配置的一個示例連接器火花在這裏:https://community.snowflake.com/s/article/How-to-connect-to-Snowflake-with-Spark-connector-via-SSO
當配置連接器這樣我得到無限的火花工作:
snowflake_table =(火花。讀.format(“雪花”).option(“數據表”,“廢話”).option (“sfURL”, "xxxxxxxx.snowflakecomputing.com/”) .option (“sfUser”,“* * *”) # * * * * *值.option (“sfPassword”,“* * *”) # * * * * *值.option .option(“身份”、“externalbrowser”) (“sfDatabase”,“廢話”).option (“sfSchema”、“等等”).option (“sfWarehouse”、“等等”).load ())
司機的消息日誌:
初始化登錄請求與你的身份提供者。為你打開瀏覽器窗口應該完成登錄。如果你不能看到它,檢查現有的瀏覽器窗口,或你的操作係統設置。按CTRL + C來中止和再試一次…
的瀏覽器窗口登錄從來沒有真正的表麵。
我發現了一個類似的評論從2020年描述問題:https://stackoverflow.com/questions/64330577/connection-issue-databricks-snowflake comment113795080_……
它仍然是磚的認證方法不支持嗎?有什麼替代方案或解決方法除了在雪花中創建本地non-SSO用戶?
謝謝
我能看到這不是去上班沒有代理的魔力localhost會話服務身份驗證的驅動程序重定向。
從那以後,我試著走外部OAUTH路線,再次使用油氣地質。可以配置一個應用程序注冊在Azure廣告和創建集成在雪花。這個問題就變成了如何最終用戶得到一個OAUTH2磚筆記本會話的訪問令牌,因為他們需要從內部認證與注冊運行磚司機會話。
旁白:不知何故Azure磚管理創建一個有效OAUTH2牌ADLS Gen1和代“澳大利亞”:“https://storage.azure.com“為用戶當憑據透傳啟用了但是我不知道這是他們使用的機製。我想讀一些技術文檔在引擎蓋下這種機製是如何工作的,如何刷新和訪問令牌生成和存儲。
看msal OAUTH身份驗證流的名單,唯一一個不需要重定向流(例如授權代碼)或憑據(例如客戶端憑據,ROPC)設備代碼。
這包括運行下麵的代碼在磚(實際的實現可以抽象出來在一個共享庫)和驗證在不同的瀏覽器窗口/標簽:
導入msal導入日誌導入json導入係統配置= {" client_id”:“0 fedeef6 - 71 - c3 - 42 - e4 ba4e d6e2b443bd17”、“權威”:“https://login.microsoftonline.com/9c5da1da-3b7d-4eb6-a0db-b83ada116551”、“範圍”:[“api: / / 5 b427fec - 4148 4 - dcb b488 - 9006 ef357fda /會話:範圍:分析師”]}應用= msal。PublicClientApplication(配置(“client_id”)、權威=配置“權威”,)結果=沒有賬戶= app.get_accounts()如果賬戶:logging.info(“賬戶(s)存在於緩存中,可能與令牌。讓我們試一試。”)打印(“選擇你想繼續使用的帳號:“)在賬戶:打印(["用戶名"])選擇結果[0]= =賬戶app.acquire_token_silent(配置(“範圍”),帳戶=選擇)如果不是結果:logging.info(“沒有合適的令牌存在於緩存中。讓我們得到一個新的AAD。”)流= app.initiate_device_flow(範圍=配置(“範圍”))如果“user_code”不在流:提高ValueError(“無法創建設備流。錯誤:% s“% json。轉儲(流,縮進= 4)打印(流(“信息”))sys.stdout.flush()結果= app.acquire_token_by_device_flow(流)
筆記本電池,提出以下消息:
一個用戶可以這OAUTH令牌JDBC連接細節:
snowflake_table1 =(火花。讀.format(“雪花”).option .option(“數據表”,“CALL_CENTER”) (“sfURL”, "xxxxxxxxxx.snowflakecomputing.com/”) .option .option (“sfUser”、“xxxxxxxxxxxxx”) (“sftoken”,結果[" access_token "]) .option .option (“sfRole”、“分析師”)(“sfAuthenticator”、“oauth) .option .option (“sfDatabase”、“SNOWFLAKE_SAMPLE_DATA”) (“sfSchema”、“TPCDS_SF100TCL”) .option (“sfWarehouse”、“COMPUTE_WH”) .load ())
對最終用戶來說這種方法複雜,涉及到複雜的身份驗證流。此外,如果有條件的訪問策略介紹了這個方法將不再工作:
結論:這是我最接近來驗證使用AAD的雪花實例進行驗證,然而它仍然感覺非常遠離SSO。這是唯一讓OAUTH令牌是一個應用程序在同一租賃作為用戶登錄數據磚磚嗎?憑據透傳如何實現呢?還有什麼我可以試試嗎?
我們已經確認從磚的方法詳細的回答是唯一可行的方法基於用戶的SSO。我們最終複製數據從雪花成磚。另一種方法是使用一個服務帳戶等,然而這可能打破一些數據治理和審計政策如果你的組織。需要這樣的事情。
其他要考慮的是,如果你的查詢可以下推成雪花雪花一邊然後執行並通過連接器返回的結果。當用戶執行一個查詢在磚不能下推(例如,使用一個UDF),那麼每一個表中引用的數據查詢是拉到磚和磚一邊執行查詢。這將對查詢性能有非常重要的影響,因此根據你的用例,數據量和頻率的雪花正在查詢您可能想考慮複製。
https://docs.snowflake.com/en/user-guide/spark-connector-use疊加