我正在寻找解决方案:
我尝试创建一个存储过程而不是调用另一个存储过程,但它没有用。欢迎任何想法......
根据定义,你想要的是不可能的。因为admin的定义是:不能拒绝任何权限的用户。因此,任何尝试做一些带有“管理员不能”短语的尝试从一开始就是有缺陷的,因为管理员将始终“可以”。
您的推理中存在更多谬误,例如认为有任何方法可以根据不受信任的输入做出特权决定。例如,要求The stored procedure must be invoked from SSMS ONLY.
. 这是基于不受信任的输入 (the APP_NAME()
)的安全决策(运行程序的权限)。
我的建议是,与其问我们如何实施您已经得出结论的必须是解决方案,不如明确您的要求,让我们为您的问题提出可能的解决方案。
您可以创建一个存储过程,通过生成 SQL Server 代理作业或使用Service Broker异步调用另一个存储过程。
具有足够权限的人仍然可以停止执行该过程(但不能通过“取消执行查询”按钮,因为您的第一个过程会立即返回,并在不同的 spid 上执行主过程)。