阅读文档这里。
我想使用 odbc 连接 Snowflake。我已经能够通过将
.odbc.ini
添加到我的主目录并使用类似于以下的配置来实现此工作:
[snowflake]
Description=SnowflakeDB
Driver=SnowflakeDSIIDriver
Locale=en-US
SERVER=ourco.us-east-1.snowflakecomputing.com
PORT=443
SSL=on
ACCOUNT=ourco.us-east-1
UID=MY_NAME
PWD=$MyPassword
这有效。通过此配置,我可以创建连接并查询我们的数据库。
但是我想使用带有密钥的 odbc 而不是我的密码。按照 here 的指南创建密钥并将其添加到 SF 界面中。
然后我更新了我的 odbc.ini 文件:
[snowflake]
Description=SnowflakeDB
Driver=SnowflakeDSIIDriver
Locale=en-US
SERVER=ourco.us-east-1.snowflakecomputing.com
PORT=443
SSL=on
UID=MY_NAME
ACCOUNT=ourco.us-east-1
PRIV_KEY_FILE=/home/rstudio-blah/keys/rsa_key.p8 # this is where I stored the key
SNOWSQL_PRIVATE_KEY_PASSPHRASE=potatoes{ # not my real pwd
尝试连接此设置时,我收到错误消息:
错误:nanodbc/nanodbc.cpp:1021: 00000: [unixODBC][Snowflake][DSI] (20032) 连接设置中不存在所需的设置“PWD”。
我尝试添加
PWD=
只是想用空值来欺骗它,但后来得到:
错误:nanodbc/nanodbc.cpp:1021:00000:[unixODBC][Snowflake][Snowflake] (31) 找不到密码。
然后我尝试添加
AUTHENTICATOR=SNOWFLAKE_JWT
,这给出了错误:
错误:nanodbc/nanodbc.cpp:1021:00000:[unixODBC][Snowflake][Snowflake] (44) 完成设置时出错:编组私钥失败。
如何使用键值对而不是 PWD 通过 odbc 进行连接?
在尝试使用 Snowflake 和 Posit (RStudio) 解决类似问题时发现了这篇文章。我注意到大部分内容已经在评论中了,但是总而言之,这对我有用:
在
odbc.ini
[snowflake]
Description= SnowflakeDB
Driver= SnowflakeDSIIDriver
SERVER= ourco.us-east-1.snowflakecomputing.com
PRIV_KEY_FILE= /home/rstudio-blah/keys/rsa_key.p8
AUTHENTICATOR= "SNOWFLAKE_JWT",
PRIV_KEY_FILE_PWD= "definedPassPhrase"
我的一些额外注释/学习内容是,路径和文件需要可供将执行 ODBC 连接的用户访问和读取,不要使用 root 进行配置。
在我的例子中,我使用 Active Directory 服务帐户进行连接,该帐户链接到密钥对,这也需要在 Snowflake 链接:
ALTER USER "[email protected]" SET
RSA_PUBLIC_KEY='YOURPUBLICKEY';
双引号表示用户,单引号表示公钥值