0

開発環境のクライアントがDW SQL 2K8R2プロセスを表示して強制終了できるようにする必要がありますが、この人には許可したくありませんVIEW SERVER STATE(彼は元 SQL データベース管理者であり、潜在的な内部脅威と見なされています)。

以下を実行すると、ユーザーが現在の権限で sp を実行したかのように 1 行が返されます。

USE [master] GO

SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO

CREATE PROCEDURE [dbo].[usp_who] with execute as owner AS BEGIN SET NOCOUNT ON; exec master.dbo.sp_who; END

「with execute as」を「self」に変更しても(私はシステム管理者です)、同じ結果が返されます。を呼び出す代わりに以下も試しましたが、sp_who1行しか返されません。

select * from sysprocesses プロシージャの実行中、コンテキストが切り替えられていない、または持続していないようです。そして、これは、この人がプロセスを「殺す」ことをどのように許可するかについては言うまでもありません。

この一見ユニークな問題に対する解決策や提案はありますか?

4

1 に答える 1

0

それは確かに独特の状況のように聞こえます。私は、この問題に対する非マシン/人間またはビジネスプロセスベースの解決策がないという点で以下に基づいています(たとえば、クライアントにこのアクセスを拒否するために設定できるポリシーがないため、事実上、問題を削除します)。

したがって、テクノロジソリューションでは、これを行うための純粋なSQLベースのソリューションを認識していませんが、DBA領域に関する知識は限られています。ただし、できることは次のとおりです。

  1. ASP.NET Webアプリケーションを作成します(おそらくWebフォームはMVCではなくここで適切ですが、それは私の意見です)。展開すると、ADで作成された特定のサービスアカウントとしてアプリケーションプールIDとして実行されるように設定されます(例:svc_KillProcessAccount)。
  2. その場合、サービスアカウントは、データベースへのアクセス権が与えられたものになり(必要な最小限の特権を考慮に入れて)、アプリケーションプールIDを設定する人以外は誰もパスワードを知る必要はありません(これは信頼できるものであると想定します)。人)
  3. Webアプリケーションは、SMOを使用しプロセスを一覧表示および強制終了できます
  4. また、Webアプリケーションは、プロセスが表示されて強制終了されたときの、ある種の監査証跡などを作成する必要があります。
  5. Webアプリケーションは、それを使用する可能性のあるユーザーを制限するために、認証と承認の観点からセキュリティを必要とする場合もあります(たとえば、どこかの管理者によって制御される単一のADグループに制限します)。

しかし、それは多くの手間と維持する別のアプリケーション、レビューするためのより多くの監査情報などです。したがって、単一の問題を解決する(または半解決する)だけの、少なくとも適度に大きな投資だと思います(私はこの状況があまり起こらないと仮定します)。

SMOとその種類のパワーを使用すると、アプリケーションで注意する必要があると思います。

だから、私はかなり複雑な解決策を与えたと思います。おそらく、より骨の折れるSQLを使用するより簡単なものがあります(私が言ったように、私はDBAでもそのようなものの専門家でもありません)が、上記の種類のソリューションを提案した場合、それは本当に私に一時停止を与えますそれが価値があるかどうか、または問題に対するある種の「人間的」またはビジネスプロセスの解決策を見つけることができるかどうかについて。

申し訳ありませんが、その最後の段落は少し意見が分かれていました-おそらく私がそのすべてを支持する必要はなかったでしょう:-)

HTH(少なくとも何らかの形で)と幸運!ネイサン

于 2013-03-19T20:28:23.987 に答える