【问题标题】:Python pyodbc connect to Sql Server using SQL Server AuthenticationPython pyodbc 使用 SQL Server 身份验证连接到 Sql Server
【发布时间】:2018-11-13 02:58:57
【问题描述】:

window 用户详细信息与我登录的 Sql Server 用户不同。所以我尝试使用 pyodbc 使用用户名(Admin_JJack)和密码连接到数据库。但是 Window User(Jack) 的连接显示失败,我不知道哪里出了问题。

我的连接字符串:

connection = pyodbc.connect(
    "Driver={"SQL Driver"};"
    "Server= "ServerName";"
    "Database="DatabaseName";"
    "UID="UserName";"
    "PWD="Password";"
    "Trusted_Connection=yes"
)

pyodbc.InterfaceError: ('28000', "[28000] [Microsoft][SQL Server Native Client 11.0][SQL Server]用户'Jack'登录失败。(18456) (SQLDriverConnect);

如何使用sql server认证连接数据库?

【问题讨论】:

  • UIDPWD 是用于 SQL Server 登录(SQL Server 身份验证)的凭据,还是用于不同于运行 Python 代码的 Windows 帐户的 Windows 登录?跨度>
  • 您能否使用与其他数据库客户端相同的凭据登录?
  • @PauloScardine 是的,我可以使用该用户名(Admin_JJack)和密码登录 SSMS。
  • @GordThompson 我使用远程桌面连接运行脚本并建立连接以使用用户名(Admin_JJack)和密码登录 sql 服务器。

标签: python sql-server pyodbc sql-server-authentication


【解决方案1】:

当您使用“Trusted_Connection=yes”时,UID 和 PWD 密钥都将被忽略,并且 Windows 帐户用于身份验证。

如果您想使用 UID 和 PWD 值而不是 Windows NTLM 帐户进行身份验证,则必须使用“Trusted_Connection=No”或从连接字符串中删除此选项。

Trusted_Connection

指定用户是否通过用户帐户使用 Kerberos [RFC4120] 或其他特定于平台的身份验证 由 fIntSecurity 字段指定(有关详细信息,请参阅 [MS-TDS] 第 2.2.6.4 节)。

有效值为“Yes”、“1”或空字符串,它们是 等效,或“否”。如果未指定值“No”,则该值 使用“是”。

如果值为“No”,则必须使用 UID 和 PWD 密钥 与数据源建立连接。

如果连接中不包含 DSN 密钥和 UID 密钥 字符串,或者如果 UID 键的值为空字符串,则值为 Trusted_Connection 键必须为“是”。如果 Trusted_Connection 连接字符串中未指定键,值必须是 从 DSN 密钥中的设置内容中获取。如果 未在 DSN 中指定 Trusted_Connection 密钥,或者如果给定的 DSN 不存在,默认值为“No”。

如果 Trusted_Connection 键的值为“Yes”,则 UID 和 PWD 密钥被忽略。否则,必须指定 UID 键。

在 Microsoft 实施中,此用户帐户是 Windows 用户 帐户和 NTLM 身份验证 [MSDN-NTLM] 在值为 Trusted_Connection 键为“是”。

来源:https://msdn.microsoft.com/

【讨论】:

    【解决方案2】:
    slightly different syntax:
    
    conn = pyodbc.connect('Driver={SQL Server};'
                            'Server=dbServer1;'
                            'Database=db1;'
                            'UID=user1;'
                            'PWD=uSer1Pass!;'
                            'Trusted_Connection=no;')
    

    【讨论】:

      【解决方案3】:

      对于 Windows 身份验证,您需要输入 Trusted_Connection=yes;而不是 uid 和 pwd,如果这不起作用,请尝试 DSN 方法 (https://docs.microsoft.com/en-us/sql/integration-services/import-export-data/connect-to-an-odbc-data-source-sql-server-import-and-export-wizard?view=sql-server-ver15)我建议执行选项 1,但这是你的电话

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-07
        • 2020-07-20
        • 1970-01-01
        • 2011-04-10
        • 2019-09-10
        相关资源
        最近更新 更多