0

Web アプリケーション開発の初心者です。私は独自に多くのスクリプト (ほとんどの VBscript) を作成し、多くの Web 開発を行ってきましたが、私が構築した ASP Classic ページのアクセス許可にこだわっています。私が Web サーバーの外部で構築およびテストしたツールは、ループ内のサーバー リストから SQL サーバーをプルし、ado 接続を作成/開き、SQL クエリを実行し、get string を使用して結果を解析し、クエリが正常に完了しました。何らかの理由で、これを Web サーバーにデプロイすると、Web サーバーのマシン アカウント 'Domain\ServerName$' を使用してページを実行しようとします。これにより、このクエリを実行しようとしている SQL サーバーに対する権限がマシン アカウントにないため、クエリが失敗します。

簡単に言うと、ASP ページで特定の資格情報を使用するように強制するにはどうすればよいですか? IIS の AppPoolPin だと思っていましたが、クエリしようとしている SQL サーバーへの特権を持つ PIN にそのアカウントを設定したので、そうではないようです。変更はありません。私の 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

新しいユーザー アカウントを作成します。

  • [アプリ プールのユーザー ID] は、ユーザー: app_pool_blahblahblah、pw: xxxxxx です。

アプリケーション プールの詳細設定:

  • .Net Framework のバージョンを "v2.0" に設定 <-- デフォルトの asp doc が機能しない問題を修正!
  • 「32 ビット アプリケーションを有効にする」を TRUE に設定します。
  • マネージド パイプライン モードを「クラシック」に設定します。
  • [プロセス モデル] の下で、ID を作成した "[アプリ プール ユーザー ID]" アカウントに変更します。
  • 「ユーザー プロファイルの読み込み」が FALSE に設定されていることを確認してください。
  • 「最大ワーカープロセス」が「1」であることを確認してください。

IIS 7.5 の Web サイト:

  • 認証 --> 「匿名認証」を編集し、アプリ プール ID に設定します。

次のフォルダーの [アプリ プール ユーザー ID] の「変更」アクセス許可を設定します。

  • あなたのウェブサイト
  • 窓\温度
  • inetpub\temp
  • inetpub\mailroot
  • 問題がある場合のみ: windows\serviceprofiles\networkservice\AppData\Local\Temp?
于 2013-08-01T15:29:51.460 に答える