0

Windows Server 2003 および IIS6 で実行されている ASP Classic Web サイトがあり、断続的なランタイム エラー 424 オブジェクトが必要です。以下に示すように、メタベースへのオブジェクト参照を初期化する行 (2 行目) までこれを追跡しました。

MetaBasePath="IIS://" & ComputerName & "/" & StorageKey & "/" & DataAccessKey
Set ConfigKey=GetObject(MetaBasePath)
DataSource=ConfigKey.Get("ODBCDataSource")
UserName=ConfigKey.Get("ODBCUserName")
Password=ConfigKey.Get("ODBCPassword")

この問題を抱えている他の誰かの兆候を探すためにstackoverflow(および一般的なWeb)を検索しましたが、空白を描きました。これを引き起こしている可能性のあるアイデアはありますか?メタベースへのアクセス頻度を制御するパフォーマンス関連の設定はありますか? メタベース アクセスの効率を改善するために採用できるベスト プラクティスの手段はありますか? データベースアクセスの詳細をメタベースに隠すことで正しいことをしていると思い込んでいるのは正しいでしょうか?それともセキュリティの観点からやり過ぎなのでしょうか?

この問題は、ページ ヒットの約 1% に影響します。

サーバー ソフトウェア コンポーネントのパッチ レベルのチェックや、メタベース オブジェクトが正しく初期化されるまで試行を続けるために上記のコードにループを追加する可能性など、さまざまなアクションを検討していますが、私の意見では、これはせいぜい短期的な修正にとどまります。 .

アドバイス大歓迎です!ありがとう、クレイグ。

追加情報: IIS5.0 分離モードが有効になっていることがわかりました。これが有効になった理由を調べようとしていますが、これは関連している可能性がありますか?

4

1 に答える 1

1

IIS メタベースは、セキュリティを目的としているのではなく、単に利便性を目的としています。

複数の仮想サーバー (IIS/ASP アプリケーション) で共有されるデータの中央リポジトリにすぎません。したがって、セキュリティ目的でのみ使用する場合、メタベースはまったく必要ありません。

なぜなら:

  • 誰から「データベース アクセスの詳細を隠している」のですか? プログラマー?しかし、彼はすでにそれにアクセスしています。ConfigKey.Get("ODBCPassword")パスワードに割り当てた後、いずれかresponse.writeがそれを明らかにします。それが で行われたとしても、ページがデータベース接続オブジェクトを作成できるようにglobal.asa、どこかでそれを接続文字列に変換する (またはApplication変数に格納する) 必要があります。.aspメタベースとオブジェクト作成の間のある時点で、彼は接続プロパティにアクセスできます。

  • で接続オブジェクトを作成し、オブジェクト自体を Application 変数に格納することで、これを防ぐことを考えないでください。global.asa(したがって、プログラマーがアクセスできるファイルからの作成を隠します)。これにより接続プーリングが停止するだけでなく、パフォーマンスが大幅に低下します。

ASP ページからのデータベース セキュリティが心配な場合は、次の方法をお勧めします。

  • 非常に限られた権限で、Web サイトにアクセスするための別のデータベース ユーザーを作成します。つまり、SELECT、INSERT、UPDATE、DELETE、EXECUTE (ストアド プロシージャ)のみです。DROP、CREATE、ALTER などはありません。この方法では、「パスワードの漏えい」や「プログラマーの誤用」によってデータベースが深刻に危険にさらされることはありません。完全な権限を持つ "admin" ユーザー パスワードは、Web サイトのどこからでもアクセス (または使用) できません。

  • 接続設定をラップする ActiveX (または COM、DCOM) DLL を作成します。C#、VB.NET、または従来の VB6 で記述できます。別の (安全で Web にアクセスできない) サーバー ファイルからログインとパスワードを読み取り、接続オブジェクトを作成して、それを ASP に直接渡します。

したがって、使用する代わりに:

set objConn = Server.CreateObject("ADODB.Connection")

ASP ページは次のものを使用します。

set objConn = Server.CreateObject("MYCLASS.Connection")

デクリピット アルゴリズムは、プレーン テキストの ASP ファイルではなく、コンパイルされたコードに格納されるため、構成ファイル自体を暗号化することもできます。

とは言っても、メタベースが役に立たないというわけではありません。次の理由から、データを保存するのに適した便利な場所です。

  • コード行を変更せずにデータを変更できます

  • 複数の Web サイトが、それぞれ独自の分離されたアプリを持っている場合でも、データを共有できます

  • 一元化されたデータは、ファイルシステム全体に散在する構成ファイルとインクルードファイルを保持するよりも常に管理が簡単です

  • ユーザー/NTFS アクセス許可は、許可されたユーザーのみがデータを変更できるように設定できますが、Web サイト ユーザー (および ASP 開発者) は読み取りのみ可能です。

とはいえ、「限られたデータベース ユーザー」+「COM クラス接続ラッパー」は、私が関わってきたほとんどの企業で使用されているアプローチです。もちろん、セキュリティを気にする人。他のものは、「global.asa にハードコードされてからアプリケーション変数に格納された接続文字列」を使用するだけです。

于 2011-03-04T17:19:22.453 に答える