使用 SSO 和基于浏览器的登录从 Python 连接到 Snowflake
Posted
技术标签:
【中文标题】使用 SSO 和基于浏览器的登录从 Python 连接到 Snowflake【英文标题】:Connecting to Snowflake from Python using SSO and browser based sign-in 【发布时间】:2021-04-29 03:39:54 【问题描述】:我正在尝试使用 SSO 连接到 Snowflake。我正在运行以下脚本(来自here):
import snowflake.connector
ctx = snowflake.connector.connect(
user='<username>',
account='<accountname>',
authenticator='externalbrowser'
)
cs = ctx.cursor()
try:
cs.execute("SELECT current_version()")
one = cs.fetchone()
print(one[0])
finally:
cs.close()
我所做的唯一更改是将authenticator='externalbrowser'
参数(请参阅this)传递给connect
方法而不是密码。 (用户和帐户不能留空,所以我只是输入虚拟字符串)。
运行脚本后,它会显示以下消息,但不会出现浏览器选项卡:
向您的身份提供者发起登录请求。应该会打开一个浏览器窗口供您完成登录。如果您看不到它,请检查现有的浏览器窗口或您的操作系统设置。按 CTRL+C 中止,然后重试...
不确定这是否相关,但如果我将其放置几分钟,脚本会以以下错误结束:
snowflake.connector.network.RetryRequest:HTTP 403:禁止
我看到了类似的问题,但还没有可以解决问题的答案。
【问题讨论】:
【参考方案1】:<username>
可能应该是一个电子邮件地址。见https://community.snowflake.com或https://docs.snowflake.com/en/user-guide/admin-security-fed-auth-use.html#setting-up-browser-based-sso
使用基于浏览器的 SSO,Snowflake 提供的客户端(例如,Snowflake JDBC 驱动程序)需要能够打开用户的 Web 浏览器。 因此,Snowflake 提供的客户端和使用它的客户端应用程序需要安装在用户的机器上。如果运行在服务器上的代码使用 Snowflake 提供的客户端,则基于浏览器的 SSO 不起作用。
【讨论】:
感谢您的回答。我正在使用 snowflake-python-connector 库 (pypi.org/project/snowflake-connector-python)。这是需要安装的客户端吗?我已经用 pip 安装了它。这就是文档的意思吗?我没有雪花的用户通行证对,但我确实将用户更改为我在该组织中拥有的电子邮件地址。但这并没有帮助。【参考方案2】:我假设您提供了正确的用户名和密码。现在,如果您仍然收到此错误,请确保使用默认浏览器(python 程序正在访问)访问雪花帐户并保持 SSO 会话处于活动状态。
现在运行你的 python 程序,它必须工作。
没有什么要求,你的代码参数看起来不错
authenticator='externalbrowser'
【讨论】:
以上是关于使用 SSO 和基于浏览器的登录从 Python 连接到 Snowflake的主要内容,如果未能解决你的问题,请参考以下文章