gpt4 book ai didi

sql-server - 释放 SQL Server 上通过 sp_getapplock 获得的另一个用户的锁

转载 作者:行者123 更新时间:2023-12-03 02:06:57 26 4
gpt4 key购买 nike

我们有一个使用 sp_getapplock 的系统每当有人在 GUI 中打开订单时创建独占互斥体。这用于防止多人同时更改订单。

有时人们会打开订单然后回家,让订单保持打开状态。这有效地阻止了任何人更改订单。然后我收到电子邮件、电话,最后做了 kill <spid>在企业经理中。显然,我已经厌倦了这种情况,想要制作一个快速的自助网络表单。

我遇到的主要问题是 kill需要系统管理员权限,我不想将其授予我们网站运行的用户。我已经尝试过sp_releaseapplock但这并不能让您释放其他用户的锁(即使以系统管理员身份调用它)。

所以,最后是我的问题;有谁知道有另一种方法来释放另一个用户使用 sp_getapplock 获得的锁吗? ?

最佳答案

documentation关于这一点非常清楚:

Locks placed on a resource are associated with either the current transaction or the current session. Locks associated with the current transaction are released when the transaction commits or rolls back. Locks associated with the session are released when the session is logged out. When the server shuts down for any reason, all locks are released.

应用锁类似于关键部分 - 它们存在的主要原因是其他线程不能简单地覆盖它们,除非它们有权杀死持有锁的进程。 p>

您是否考虑过使用某种形式的乐观并发?应用锁的每次保留时间不超过一秒,即典型事务的持续时间。正是由于这个原因,坚持几分钟(或几小时)通常不是一个好主意。

如果你必须以这种方式使用applocks,并且不能使用乐观并发,那么我相信你唯一的办法就是杀死拥有锁的spid。

如果您不想向用户授予系统管理员权限,您可以创建一个存储过程来终止进程 WITH EXECUTE AS <admin_user> ...当然,请记住,这会打开一个相当大的安全漏洞,因此要非常小心向谁授予执行权限。

关于sql-server - 释放 SQL Server 上通过 sp_getapplock 获得的另一个用户的锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2726314/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com