2013-03-19 47 views
0

我需要允許客戶端在開發環境DW SQL 2K8R2環境中查看和終止進程,但我不想授予VIEW SERVER STATE這個人(他是以前的sql dba並且被認爲是潛在的內部威脅) 。自定義sp_who/sp_whoUsers

當我運行以下內容時,它會返回一行,就好像用戶使用當前權限運行sp一樣。

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_who,它只返回一行。

select * from sysprocesses 在整個過程的執行過程中,似乎上下文並未切換或持續。這就是說我怎麼會允許這個人「殺死」進程。

有沒有人有解決方案或一些建議,這似乎是獨特的問題?

+0

這主要是你的[上一個問題]的副本(http://stackoverflow.com/questions/15437168/custom-sp-who-without-granting-view-server-state) – Pondlife 2013-03-19 20:49:29

回答

0

這聽起來像一個獨特的情況。我基於以下內容,沒有針對該問題的基於非機器/人員或業務流程的解決方案(例如,沒有可用於拒絕客戶訪問的策略,因此實際上解決了問題)。

因此,對於一個技術解決方案,我不知道任何純粹的基於SQL的解決方案來做到這一點,但我在DBA領域的知識是有限的。不過,你可以做的是:

  1. 創建ASP.NET Web應用程序(可能是Web窗體會在這裏好,而不是MVC,不過這只是我的意見)的部署時,將被設置爲作爲應用程序運行將池身份標識爲在您的AD中創建的特定服務帳戶(例如svc_KillProcessAccount)。
  2. 然後服務帳戶就是訪問數據庫的事情(考慮到需要的最小特權),除了設置應用程序池標識的人員之外,沒有人需要知道密碼(我們將假定當過程進行了觀察和殺害
  3. 網絡是一個值得信賴的人)
  4. Web應用程序可以使用SMO列出並kill過程
  5. 我也想說的Web應用程序應該寫某種形式的審計跟蹤或類似的應用程序可能還需要身份驗證和授權方面的安全措施,以限制可能使用我的用戶t(例如其限制到的很多擺弄周圍的另一個應用程序,以保持其是由管理員某處控制的單一AD組)

,更多的審計信息,審查等等等等所以我在考慮至少是一個只能解決(或半解決)單個問題的中等規模的投資(我認爲這種情況並不多)。

我認爲與SMO和應用程序會讓你需要小心的那種力量。

所以,我想我已經給出了一個相當複雜的解決方案。也許有一種更容易使用SQL的方法(正如我所說的,我不是DBA或這些類型的專家),但是如果我在上面提出這種解決方案,那真的會給我一些暫停圍繞是否值得,或者我們能否找到某種「人」或業務流程解決方案來解決問題。

對不起,最後一段是有點自以爲是 - 你可能並不需要我將擁護所有:-)

HTH(以某種方式至少)好運! Nathan