首页 > 编程问答 >使用snowflake.connector 3.0.3上的密钥对从python连接到snowflake

使用snowflake.connector 3.0.3上的密钥对从python连接到snowflake

时间:2024-07-23 08:55:54浏览次数:9  
标签:python snowflake-cloud-data-platform key-pair

我正在尝试使用 Snowflake.connector 包从我的 Python 代码连接到 Snowflake。 不幸的是,由于遗留代码,我只能在 python 3.7.3 上使用 Snowflake 连接器版本 3.0.3,并且无法升级

我确实设法从我自己的计算机进行连接,使用:

con = Snowflake.connector。连接( ... 私有密钥文件 = <私有密钥路径> ... )

所以我知道这有效。但是,我使用 3.8.1 版本的连接器,并且稍后添加了 private_key_file 参数。

如何在旧版本的雪花 python 连接器上使用密钥对进行连接


是对的,Snowflake 连接器 3.0.3 版本不支持 private_key_file 参数。该参数是在更高版本中添加的,以简化使用密钥对进行身份验证。

以下是在 Snowflake 连接器 3.0.3 中使用密钥对进行身份验证的方法:

  1. 使用 cryptography 包加载私钥:
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding

with open("<私钥路径>", "rb") as key:
    private_key = serialization.load_pem_private_key(
        key.read(),
        password=None, # 如果私钥有密码,请在此处提供
        backend=default_backend()
    )
  1. 使用私钥对连接字符串进行签名:
import json

# 构造 Snowflake 连接字符串
connection_parameters = {
    "account": "<account>",
    "user": "<user>",
    "warehouse": "<warehouse>",
    "database": "<database>",
    "schema": "<schema>"
}
connection_string = json.dumps(connection_parameters, separators=(',', ':'))

# 使用私钥对连接字符串进行签名
signature = private_key.sign(
    connection_string.encode('utf-8'),
    padding.PSS(
        mgf=padding.MGF1(hashes.SHA256()),
        salt_length=padding.PSS.MAX_LENGTH
    ),
    hashes.SHA256()
)
  1. 将签名传递给连接器:
con = snowflake.connector.connect(
    account="<account>",
    user="<user>",
    private_key=signature,
    ... # 其他连接参数
)

请注意,需要将 <account> <user> <warehouse> <database> <schema> 替换为的实际值,并将 <私钥路径> 替换为的私钥文件路径。

This approach manually loads the private key, signs the connection string, and passes the signature to the connector. This method achieves the same outcome as using the private_key_file parameter in later versions.

标签:python,snowflake-cloud-data-platform,key-pair
From: 78781185

相关文章

  • python 文件(txt)操作
    我有一个txt文件,其中包含一列(大约2000个)单词。每个单词只用一个新行分隔。我想将所有这些单词存储在一个数组中words.txt文件的示例:applebananaorange我尝试过的代码:importrandomwithopen('E:/Code/learn/Projects/word-guessing-game/words.txt','r')a......
  • matplotlib与Python不兼容问题
    “我使用的是Matplotlib版本3.7.2。Anaconda的Spyder中的Python版本是3.8.18。当我运行importmatplotlib.pyplotasplt行时,出现错误module'matplotlib'hasnoattribute'rcParams'。当我尝试将Matplotlib和matplotlib.base包从当前的3.7.2版本升级到3.8......
  • 使用 json 配置文件进行 Python 日志记录
    我玩弄了日志模块,发现了一些我不太清楚的事情。首先,因为这是一个大程序,我希望代码尽可能简单,因此我使用了json配置文件.{"version":1,"disable_existing_loggers":false,"formatters":{"simple":{"format":"%(asctime)s-%(name)s......
  • Python随机库:从帕累托分布进行模拟(使用形状和尺度参数)
    根据Python文档,random.paretovariate(alpha)模拟帕累托分布,其中alpha是形状参数。但帕累托分布同时采用形状和尺度参数。如何从指定这两个参数的分布中进行模拟?你说的对,帕累托分布是由形状和尺度参数定义的,而random.paretovariate(alpha)函数只接受形状参数......
  • 跳过 Python Spark Pyspark Databricks 未知字段异常中的不良记录
    我想知道是否有人知道如何跳过我们从json文件获取的记录这是错误[UNKNOWN_FIELD_EXCEPTION.NEW_FIELDS_IN_RECORD_WITH_FILE_PATH]在解析过程中遇到未知字段:这是失败的代码sent=spark.readStream.format('cloudFiles')\.option('cloudFiles.format','json')......
  • 使用 python 截断 Databricks 中的增量表
    对于Python和SQL,这里给出了Delta表删除操作,并且给出了使用SQL的截断这里但我找不到Python截断表的文档。如何在Databricks中对增量表执行此操作?HowtodoitfordeltatableinDatabricks?虽然Databricks中没有直接使用PythonAPI截断De......
  • 从Python中的列表列表中提取随机列表选择
    我有一个从图像生成的RGB值列表:color_list=[(192,155,120),(132,81,65),(226,226,199),(76,94,117),(140,157,178),(17,34,54),(217,213,139),(134,171,144),(98,123,95),(109,145,96),(181,109,92),(71,47,39),......
  • 这段代码是否保证Python对象被立即删除?
    我正在将Redis异步客户端与Celery一起使用,但在两者之间的集成方面遇到了一些问题。上下文是我需要删除redis.Redis实例(在构造函数中创建)以便关闭连接(该对象有一个close方法,但当asyncio事件循环关闭时我无法使用它,heal_client方法仅在这些情况下才会使用。我的代码如......
  • python selenium 行为错误:AttributeError:“Context”对象没有属性“driver”
    我正在使用pythonselenium与Behavior包一起工作。这是代码:@given('theuserisontheloginpage')defstep_given_user_on_login_page(context):PATH='C:/Users/PycharmProjects/ui_test/chromedriver-win32/chromedriver.exe'context.driver=......
  • python 脚本中的路点用于处理大数据集
    我编写了一个脚本,将一堆来自api的请求写入csv文件。该api中有数千个请求,并且在结束循环/退出程序之前永远不会结束。如何合并航路点,以便如果再次发生停顿,它会自动继续前进并最终打印所有请求?我尝试了一些不起作用的方法,但我不知道下一步该怎么做。以下是使用航路点......