我在笔记本电脑上安装并配置了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 = ''
答案 0 :(得分:1)
确定要使用的身份验证形式,数据库或Windows。你不能同时使用它们。
如果要使用Windows身份验证,请将连接设置更改为以下内容:
cnxn = pyodbc.connect(driver='{SQL Server}', server='SERVER\INSTANCE',
database='Test_Chad', trusted_connection='yes')
通过Windows身份验证将Web应用程序连接到数据库需要一些其他配置。如果您的Web应用程序在IIS中使用匿名身份验证,则将使用运行Web应用程序的应用程序池的标识来建立数据库连接。以下是设置此标识的屏幕截图:
如果您想使用简单数据库身份验证,请为uid
和pwd
提供相应的值,然后移除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;")
然后我将连接更改为以下代码,并与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;
它会起作用,不要忘记提供所需的模式访问权限。