自定义sp_who / sp_whoUsers

时间:2013-03-19 20:16:46

标签: sql-server-2008 stored-procedures context-switching

我需要允许dev DW SQL 2K8R2环境中的客户端查看和终止进程,但我不想将VIEW SERVER STATE授予此人(他是以前的sql dba并且被认为是潜在的内部威胁)。

当我运行以下命令时,它会返回一行,就好像用户使用当前权限运行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,它只返回一行。

从sysprocesses中选择* 在整个过程执行过程中,上下文似乎没有切换或持久化。这就是说我将如何让这个人“杀死”过程。

有没有人对这个看似独特的问题有解决方案或建议?

1 个答案:

答案 0 :(得分:0)

这当然听起来像一个独特的情况。我基于以下内容,因为没有非机器/人工或基于业务流程的解决方案(例如,没有可用于拒绝客户端访问的策略,因此,实际上,删除了问题)。

因此,使用技术解决方案,我不知道任何基于SQL的解决方案,但我在DBA领域的知识有限。但是,你能做的是:

  1. 创建一个ASP.NET Web应用程序(可能是Web Forms,而不是MVC,但这只是我的意见),部署时将设置为作为特定服务帐户运行的应用程序池标识你的AD(例如svc_KillProcessAccount)。
  2. 然后服务帐户将被授予对数据库的访问权限(考虑到所需的最低权限)并且除了设置应用程序池标识的人之外,没有人需要知道密码(我们将假设这一点)是一个值得信赖的人)
  3. 网络应用程序可以使用SMO列出和kill进程
  4. 我还会说Web应用程序应该编写某种审计跟踪或类似的进程被查看和杀死的时间
  5. Web应用程序在身份验证和授权方面可能还需要安全性,以限制可能使用它的用户(例如,将其限制为由某个管理员控制的单个AD组)
  6. 这是很多摆弄和另一个应用程序维护,更多的审核信息审查等等所以我会认为它至少是一个中等规模的投资,只会解决(或半解决)一个问题(我假设这种情况不会出现太多)。

    我认为SMO和应用程序具有的强大功能你需要小心。

    所以,我想我已经给出了一个相当复杂的解决方案。也许有一个更简单的使用更多的骨头SQL(正如我所说,我不是DBA或这类事情的专家)但如果我提出上面的那种解决方案它会给我一些停顿围绕它是否值得,或者我们是否能找到某种“人”或业务流程解决问题。

    对不起,最后一段有点自以为是 - 你可能不需要我支持所有这些: - )

    HTH(至少在某种程度上)和祝你好运! 森