【问题标题】:SQLAlchemy and mssql+pymssql password fails after a certain lengthSQLAlchemy 和 mssql+pymssql 密码在一定长度后失败
【发布时间】:2014-09-27 13:52:04
【问题描述】:

我今天遇到了一件有趣的事情。

如果我使用包含 30 个字符的字符串,我将能够连接到 sql-server 数据库。但是第二次我转到一个 31 个字符的字符串,我会收到一个,

sqlalchemy.exc.OperationalError: (OperationalError) (18456, "Login failed for user

示例代码:

database_type = "mssql+pymssql"
user_name = "readonly"
user_pass = "j2AZDPBi3ITWnegddQS2xy9HPDLMzXh"
database_uri = "server.domain"
connection_string = r"{0}://{1}:{2}@{3}/Logging".format(
    database_type,
    user_name,
    user_pass,
    database_uri,)

print(connection_string)
engine = sa.create_engine(connection_string, echo=True)
connection = engine.connect()

现在奇怪的是,如果我使用 SQL Server Management Studio 连接到数据库,我可以连接到更大的字符串。

为什么密码长度对一个重要而不是另一个?

我正在使用

SQLAlchemy==0.9.7
pymssql==2.1.0
SQL Server 2014

【问题讨论】:

    标签: sql-server sqlalchemy freetds


    【解决方案1】:

    今天我自己遇到了同样的问题,这是由freetds <= 0.91 中的硬限制引起的。它已在 github 上的当前版本中进行了修补,但大多数发行版仍然有 0.91 或更早版本。

    tsql 不受此限制的影响,因为它直接使用协议,而大多数使用 API 的库对用户名和密码有 20 或 30 个字节的限制。在重新安装 pymssql 之前删除旧库的所有痕迹并从源代码重建 freetds 解决了这里的问题。

    在发出语句以获得正确的 TDS 版本之前设置 os.environ['TDSVER'] = '7.0' 也很有用,因为 pymssql 显然忽略了 freetds.conf 中的设置

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-13
      • 2020-12-10
      • 2019-02-23
      • 2017-10-07
      • 1970-01-01
      • 1970-01-01
      • 2016-12-08
      • 2018-12-17
      相关资源
      最近更新 更多