0

如何通过 ADODB.Connection 对象使用一组指定的 Windows 凭据连接到 MS SQL Server?

例子:

Dim oConn  
Set oConn = CreateObject("ADODB.Connection")
Dim oRs
Set oRs = CreateObject("ADODB.Recordset")
Dim strConnection
Dim strSQL
strSQL = "SELECT * from Computer WHERE DeviceName = N'myDevice'"

oConn.Provider = "SQLOLEDB.1"
oConn.Properties("User ID") = "myDomain\myUser" 
oConn.Properties("Password") = "myPassword" 
oConn.Properties("Initial Catalog") = "myDB"
oConn.Properties("Data Source") = "mySQLServer"
oConn.Open

如果我这样做,那么它会失败并出现以下错误:

Microsoft OLE DB Provider for SQL Server error '80040e4d' 

Login failed for user 'myDomain\myUser'.

检查 SQL Server 日志显示此错误:

Login failed for user 'myDomain\myUser'. Reason: Could not find a login matching the name provided. [CLIENT: <IP>]

帐户“myDomain\myUser”可以访问 SQL Server,因为它是在服务器上具有“sysadmin”权限的组的成员。我可以使用相同的用户名 RDP 到 SQL Server 并成功打开 Management Studio 并管理 SQL Server。

我基本上想要实现的是使用集成安全性,因为我通过 IIS 上的网页运行它,您必须使用 Active Directory 进行身份验证才能访问。身份验证部分正在工作,Request.ServerVariables("AUTH_USER")并将显示正确的用户名。

如果我将“用户 ID”和“密码”部分替换为,oConn.Properties("Integrated Security") = "SSPI"则会出现以下错误:

Microsoft OLE DB Provider for SQL Server error '80040e4d' 

Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'.

哪个不是我提供的凭据?

我怎样才能使这项工作?

提前致谢。

4

1 回答 1

2

有几点值得注意。如果您尝试使用 Windows 域帐户登录,那么您可能正在尝试使用受信任的连接。您需要将 IIS 配置为不允许匿名访问并打开集成 Windows 身份验证(这可能会有所不同,具体取决于您安装的 IIS 版本和操作系统)。

查看以下连接字符串,看看它们是否没有帮助(这些可能会有所不同,具体取决于您使用的数据库 - 只需 google 即可):

使用登录的用户凭据

strConn = "Driver={SQLServer};Server=your_server_name;Database=your_database_name;Trusted_Connection=yes;"
Set cnt = Server.CreateObject("ADODB.Connection")
cnt.ConnectionString= strConn

使用 SQL Server 用户名和密码(不是域名和密码)

strConn = "Driver={SQL Server};Server=mySQLServer;Database=myDB;uid=someUser;pwd=somePass"
Set cnt = Server.CreateObject("ADODB.Connection")
cnt.ConnectionString= strConn

祝你好运。

于 2013-01-29T14:51:32.750 回答