执行无法手动停止的存储过程

0 sql-server-2005 sql-server

我正在寻找解决方案:

  1. 允许管理员手动运行存储过程
  2. 一旦存储过程运行相同的管理员不能使用“取消执行查询”停止它
  3. 存储过程只能从 SSMS 调用。
  4. 除了 MS Management Studio 和 TSQL 之外,不能使用其他外部程序或语言。

我尝试创建一个存储过程而不是调用另一个存储过程,但它没有用。欢迎任何想法......

Rem*_*anu 9

根据定义,你想要的是不可能的。因为admin的定义是:不能拒绝任何权限的用户。因此,任何尝试做一些带有“管理员不能”短语的尝试从一开始就是有缺陷的,因为管理员将始终“可以”。

您的推理中存在更多谬误,例如认为有任何方法可以根据不受信任的输入做出特权决定。例如,要求The stored procedure must be invoked from SSMS ONLY.. 这是基于不受信任的输入 (the APP_NAME())的安全决策(运行程序的权限)。

我的建议是,与其问我们如何实施您已经得出结论的必须是解决方案,不如明确您的要求,让我们为您的问题提出可能的解决方案。


Mar*_*ith 6

您可以创建一个存储过程,通过生成 SQL Server 代理作业或使用Service Broker异步调用另一个存储过程。

具有足够权限的人仍然可以停止执行该过程(但不能通过“取消执行查询”按钮,因为您的第一个过程会立即返回,并在不同的 spid 上执行主过程)。