0

我对 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>","&nbsp;")


 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>

所以我愿意接受任何建议。我想知道如何强制此页面使用凭据,而无需在连接字符串中明显包含登录名和密码。我绝对不能那样做。

提前感谢您的帮助。对不起,很长的帖子。在我在这里发布之前,我确实环顾了一段时间试图解决这个问题。

4

1 回答 1

0

创建新用户帐户:

  • [应用程序池用户身份] 是用户:app_pool_blahblahblah,密码:xxxxxx

在应用程序池中,高级设置:

  • 将 .Net Framework 版本设置为“v2.0”<-- 修复了默认 asp 文档不起作用的问题!
  • 将“启用 32 位应用程序”设置为 TRUE。
  • 将托管管道模式设置为“经典”。
  • 在 Process Model 下,将 Identity 更改为我们创建的“[app pool user identity]”帐户。
  • 确保“加载用户配置文件”设置为 FALSE。
  • 确保“最大工作进程”为“1”。

在 IIS 7.5 下的网站:

  • 身份验证 --> 编辑“匿名身份验证”并设置为应用程序池身份。

为以下文件夹设置 [应用程序池用户身份] 的“修改”权限:

  • 你的网页
  • 窗户\温度
  • 网吧\临时
  • inetpub\mailroot
  • 仅在出现问题时:windows\serviceprofiles\networkservice\AppData\Local\Temp?
于 2013-08-01T15:29:51.460 回答