0

我需要允许开发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,它只返回一行。

select * from sysprocesses 在整个过程的执行过程中,上下文似乎没有切换或持续存在。这更不用说我将如何允许这个人“杀死”进程。

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

4

1 回答 1

0

这听起来确实是一种独特的情况。我基于以下原因,没有针对该问题的非机器/人工或基于业务流程的解决方案(例如,没有可以制定的策略来拒绝客户的访问,因此实际上消除了问题)。

因此,对于技术解决方案,我不知道有任何纯基于 SQL 的解决方案可以做到这一点,但我在 DBA 领域的知识是有限的。但是,您可以做的是:

  1. 创建一个 ASP.NET Web 应用程序(可能 Web 窗体在这里比 MVC 更好,但这只是我的意见),在部署时将设置为作为应用程序池身份作为在您的 AD 中创建的特定服务帐户运行(例如 svc_KillProcessAccount)。
  2. 然后,服务帐户将成为访问数据库的对象(考虑到所需的最低权限),除了设置应用程序池身份的人之外,没有人需要知道密码(我们假设这是受信任的人)
  3. Web 应用程序可以使用SMO列出和终止进程
  4. 我还要说,Web 应用程序应该编写某种审计跟踪或类似的进程被查看和终止的时间
  5. Web 应用程序可能还需要在身份验证和授权方面的安全性,以限制可能使用它的用户(例如,将其限制为由某处管理员控制的单个 AD 组)

但这需要大量摆弄,需要维护另一个应用程序,需要审查更多审计信息等等。所以我认为这至少是一项中等规模的投资,它只会解决(或半解决)一个问题(我是假设这种情况不会出现太多)。

我认为对于 SMO 和应用程序所具有的那种能力,你需要小心。

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

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

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

于 2013-03-19T20:28:23.987 回答