【问题标题】:pyodbc connection to MSSQL 2005 server via IIS7pyodbc 通过 IIS7 连接到 MSSQL 2005 服务器
【发布时间】:2012-10-04 21:26:54
【问题描述】:

我已经在我的笔记本电脑上安装并配置了 IIS7,并带有一个 python cgi 接口。我可以从 Eclipse 中运行 python 脚本并从数据库中获取我正在寻找的结果。但是当我从网页运行脚本时,我得到一个身份验证错误。似乎连接字符串没有将凭据传递给 SQL 服务器。有什么想法吗?

import pyodbc
import cgi
import cgitb; cgitb.enable()

cnxn = pyodbc.connect(driver='{SQL Server}', 
                  server='SERVER\INSTANCE', 
                  Trusted_Connection='yes', 
                  database='Test_Chad', 
                  uid='SERVER\username', 
                  pwd='password')

def getRow():
    cursor = cnxn.cursor()
    cursor.execute("select user_id, user_name from users")
    row = cursor.fetchone()
    print 'name:', row.user_id     
    print 'name:', row.user_name

getRow()

例外:

<class 'pyodbc.Error'>: ('28000', "[28000] [Microsoft][ODBC SQL Server Driver][SQL Server]Login failed for user 'NT AUTHORITY\\ANONYMOUS LOGON'.
(18456) (SQLDriverConnect); [28000] [Microsoft][ODBC SQL Server Driver][SQL Server]Login failed for user 'NT AUTHORITY\\ANONYMOUS LOGON'. (18456)") 
args = ('28000', r"[28000] [Microsoft][ODBC SQL Server Driver][SQL ... for user 'NT AUTHORITY\ANONYMOUS LOGON'. (18456)") 
message = ''

【问题讨论】:

  • 您想通过uidpwd 属性使用数据库身份验证,还是通过'Trusted_Connection=yes' 使用Windows 身份验证?

标签: python sql-server-2005 iis-7 pyodbc


【解决方案1】:

决定您要使用哪种形式的身份验证,数据库或 Windows。不能同时使用。

如果您想使用 Windows 身份验证,请将您的连接设置更改为以下内容:

cnxn = pyodbc.connect(driver='{SQL Server}', server='SERVER\INSTANCE',  
                      database='Test_Chad', trusted_connection='yes') 

通过 Windows 身份验证将 Web 应用程序连接到数据库需要一些其他配置。如果您的 Web 应用程序在 IIS 中使用匿名身份验证,则将使用运行 Web 应用程序的应用程序池的标识来建立数据库连接。这是设置此身份的屏幕截图:

如果您想使用简单的数据库身份验证,请为uidpwd 提供适当的值,并删除Trusted_Connection=yes

cnxn = pyodbc.connect(driver='{SQL Server}', server='SERVER\INSTANCE',  
                      database='Test_Chad', uid='username', pwd='password')

【讨论】:

  • 谢谢,那是缺少的链接。我设置了一个本地 SQL Server 身份验证帐户,删除了 Trusted_Connection 选项,一切都按预期工作。
  • 我正在使用 Web 服务器数据库 ..我收到登录失败错误,但我提供了 coreect 用户名和密码
【解决方案2】:

我将以下代码与 Identity 一起使用:如图所示,但不起作用:

cnxn = pyodbc.connect(
        "Driver={SQL Server Native Client 11.0};Server=MyServerName;Database=MyDbName;Trusted_Connection=yes;")


然后我只需将我的连接更改为以下代码并与 Identity= Localsystem 完美配合

cnxn = pyodbc.connect(
        "Driver={SQL Server Native Client 11.0};Server=MyServerName;Database=MyDbName; uid=MyUsernameLoginDb; pwd=MyDbPasswordLoginToDB; ")

【讨论】:

    【解决方案3】:

    如果您正确设置了应用程序池安全性(即应用程序池用户在 SQl 服务器上具有登录和访问权限),那么您需要配置匿名访问以使用应用程序池标识而不是其默认值 (IUSR)。转到身份验证部分 IIS 7 --> 匿名身份验证 --> 右键单击​​以编辑 --> 选择使用应用程序池标识的选项。

    【讨论】:

      【解决方案4】:

      只需创建一个 MYSQL 用户并将其传递给 uid 和 pwd。

      使用密码创建登录 MyUser = 'pass@123'; 为登录 MyUser 创建用户 MyUser;

      它会起作用,别忘了提供所需的架构访问权限。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-19
        • 1970-01-01
        • 1970-01-01
        • 2011-06-07
        • 2014-12-02
        • 1970-01-01
        • 2014-01-29
        • 1970-01-01
        相关资源
        最近更新 更多