gpt4 book ai didi

sql-server - 将所有用户限制为 1 个 session

转载 作者:行者123 更新时间:2023-12-02 20:42:43 26 4
gpt4 key购买 nike

我需要将 SQL Server 配置为每次登录仅允许一个 session 。我发现了一些关于创建登录触发器的引用,以防止登录建立超过 1 个 session ,但我想知道是否有某种方法可以在较低级别定义它,以便此 session 限制是默认值,而不是而不是必须在每个用户的另一个登录中定义它?

我在 stackoverflow 上的“可能已经有答案的问题”和“类似问题”中看到很多对此主题的引用,但到目前为止,还没有找到或不理解描述我的帖子试图做。我还看到了关于声明性管理框架的引用,我认为它允许您按策略配置 SQL Server。

我将继续浏览这里的文章来尝试学习这一点,但与此同时......非常感谢您的建议!

最佳答案

logon trigger 的示例在线图书中的内容与我认为您想要的非常接近,我做了一些更改以使其适用于所有登录。

-- Trigger must be created by a user with 'view server state' permission in order the trigger to have unrestricted access to sys.dm_exec_sessions.
create trigger connection_limit_trigger on all server with execute as self for logon
as
begin
-- Check whether the caller is a SysAdmin.
-- Note: The trigger is executing under an elevated security context so we must switch to the caller's context to test their SysAdmin status.
declare @IsSysAdmin int
execute as caller
set @IsSysAdmin = isnull(is_srvrolemember ('sysadmin'), 0)
revert

-- If the user is not a SysAdmin and there are already too many non-dormant sessions for this login then 'rollback' the logon.
-- Note: sys.dm_exec_sessions does not include an entry for this logon attempt.
if ((@IsSysAdmin = 0) and ((select count(1) from sys.dm_exec_sessions where is_user_process = 1 and status <> 'Dormant' and original_login_name = original_login()) > 1))
begin
raiserror('This login has exceeded the maximum of 1 connections to this SQL Server.', 16, 1)
rollback
end
end

我添加了一项检查,因此该限制不适用于系统管理员登录,并且不计算休眠连接池连接。有几点需要注意;

  • 如果连接未正确关闭,它可能会在 sys.dm_exec_sessions 中停留一段时间,在这种情况下,用户将无法重新连接,直到死连接自行清除。
  • 如果您弄乱了登录触发器,您可以将自己(以及其他所有人!)锁定在 SQL Server 之外。请参阅logon trigger页面了解如何返回的详细信息:)

关于sql-server - 将所有用户限制为 1 个 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27510907/

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