簡體   English   中英

使用令牌連接到 MySQL

[英]Connecting to MySQL using a token

我一直在嘗試使用sqlalchemy庫使用令牌連接到 RDS 實例。 根據文檔,應該可以通過cparams['token']變量,但這樣做我得到一個意外參數的錯誤。

深入了解docs ,有這段代碼可以使用關鍵字參數attrs_before建立連接,但在這種情況下,這樣的參數也不存在。

有沒有人知道如何使用令牌連接到數據庫?

我試圖通過這樣的代碼來做到這一點,但沒有效果:

import boto3
import struct
from sqlalchemy import create_engine, event
from sqlalchemy.engine.url import URL
from sqlalchemy.engine.url import URL
from sqlalchemy.orm import sessionmaker

SQL_COPT_SS_ACCESS_TOKEN = 1256
session = boto3.session.Session(profile_name='xxx')
rds = session.client('rds')

def get_authentication_token():
    return rds.generate_db_auth_token(DBHostname='xxxx', Port=3306, DBUsername='xxx')

engine_url = URL.create(drivername='mysql+pymysql', host='xxxx')
engine = create_engine(engine_url)

#@event.listens_for(engine, 'do_connect')
#def provide_token(dialect, conn_rec, cargs, cparams):
#    token_struct = struct.pack(f'<I{len(token)}s', len(token), token)
#    cparams['attrs_before'] = {SQL_COPT_SS_ACCESS_TOKEN: token_struct}

@event.listens_for(engine, "do_connect")
def provide_token(dialect, conn_rec, cargs, cparams):
    cparams['token'] = get_authentication_token()

Session = sessionmaker(bind=engine)

with Session() as session:
    result = session.execute('select now()').first()

更准確地說,我收到錯誤: TypeError: __init__() got an unexpected keyword argument 'token'

我有同樣的問題,為我解決的是用password替換token

@event.listens_for(engine, "do_connect")
def provide_token(dialect, conn_rec, cargs, cparams):
    cparams['password'] = get_authentication_token()

還有一點是你還必須在連接中傳遞SSL證書,我只是添加了另一個參數:

@event.listens_for(engine, "do_connect")
def provide_token(dialect, conn_rec, cargs, cparams):
    cparams['password'] = get_authentication_token()
    caparam['ssl'] = {"ca": "rds-combined-ca-bundle.pem"}

請記住,您可能必須將完整路徑傳遞給rds-combined-ca-bundle.pem文件。 如果您不傳遞 SSL 文件和連接參數,即使其他所有設置都正確,您仍然會收到Access Denied

SSL 文件可以從https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem下載

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM