【问题标题】:Connecting to MySQL using a token使用令牌连接到 MySQL
【发布时间】:2021-11-25 13:13:05
【问题描述】:

我一直在尝试使用令牌使用 sqlalchemy 库连接到 RDS 实例。根据docs,它应该可以通过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'

【问题讨论】:

    标签: python mysql sqlalchemy


    【解决方案1】:

    我遇到了同样的问题,为我解决的问题是将 token 替换为 password

    @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下载

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-03
      • 2020-05-18
      • 2018-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-08
      • 1970-01-01
      相关资源
      最近更新 更多