我对 Web 应用程序开发很陌生。我自己编写了很多脚本(大多数是 VBscript),并且做了很多 Web 开发,但我坚持对我构建的 ASP Classic 页面的权限。我在我的 Web 服务器之外构建和测试的工具非常简单地从一个循环中的服务器列表中拉出 SQL 服务器,创建/打开一个 ado 连接,执行一个 SQL 查询,使用 get 字符串来解析结果并确定查询是否顺利完成。出于某种原因,当我将它部署到我的 Web 服务器时,它会尝试使用 Web 服务器的机器帐户“Domain\ServerName$”来运行该页面。这会导致查询失败,因为机器帐户对我尝试运行此查询的 sql 服务器没有权限。
长话短说,我如何强制我的 ASP 页面使用特定的凭据?我以为是 IIS 中的 AppPoolPin,但对我来说似乎并非如此,因为我已将该帐户设置为一个 PIN,该 PIN 对我尝试查询的 SQL 服务器具有特权,没有更改,我的 asp 页面仍然使用机器帐户'Domain\ServerName$'。
这是我的代码(出于安全目的,略微剥离)
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<%
strFilePath = "\\server\path\to\list\"
Set Fso = CreateObject("Scripting.FileSystemObject")
Set InputFile = fso.OpenTextFile(strFilePath & "SQLServerList.txt" , 1)
Do While Not (InputFile.atEndOfStream)
On Error Resume Next
ServName = InputFile.ReadLine
Set myConn = CreateObject("ADODB.Connection")
Set objRecordSet = CreateObject("ADODB.Recordset")
DB_CONNECT_STRING = "Provider=SQLOLEDB.1;Data Source=" & ServName & ";Initial Catalog=Master;Integrated Security=SSPI"
myConn.Open DB_CONNECT_STRING
objRecordSet.Open "select @@VERSION", myConn
Rows = objRecordSet.GetString(,,"</td><td>","</td></tr><tr><td>"," ")
If (InStr(Rows,"Microsoft"))=1 Then %>
<table border="1" width="100%">
<tr>
<td><%Response.Write ServName%></td>
<td><%Response.Write "Online"%></td>
</tr>
</table>
<%Else%>
<table border="1" width="100%">
<tr>
<td><%Response.Write ServName%></td>
<td><%Response.Write "Failed"%></td>
</tr>
</table>
<%
End If
Rows = ""
Set objRecordSet = Nothing
myConn.Close
Set myConn = Nothing
Loop
%>
</body>
</html>
所以我愿意接受任何建议。我想知道如何强制此页面使用凭据,而无需在连接字符串中明显包含登录名和密码。我绝对不能那样做。
提前感谢您的帮助。对不起,很长的帖子。在我在这里发布之前,我确实环顾了一段时间试图解决这个问题。