pyodbc通过IIS7连接到MSSQL 2005服务器

时间:2012-10-04 21:26:54

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

我在笔记本电脑上安装并配置了IIS7,并使用python cgi界面。我可以从Eclipse中运行python脚本,并从数据库中获取我正在寻找的结果。但是当我从网页运行脚本时,我收到了身份验证错误。似乎连接字符串未将凭据传递给SQL Server。有什么想法吗?

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 = ''

4 个答案:

答案 0 :(得分:1)

确定要使用的身份验证形式,数据库或Windows。你不能同时使用它们。

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

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

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

IIS application pool identity

如果您想使用简单数据库身份验证,请为uidpwd提供相应的值,然后移除Trusted_Connection=yes

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

答案 1 :(得分:1)

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

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

enter image description here


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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

使用PASSWORD ='pass @ 123'创建登录MyUser; 创建用户MyUser以便登录MyUser;

它会起作用,不要忘记提供所需的模式访问权限。