我正在 SQL Server 2019 中创建一个触发器,以确保用户可以拥有的 SQL Server 连接数量。
我在使用域组获取 SYSDBA 访问权限时遇到问题。我宁愿这样做,而不是识别触发器中的每个用户。
如何识别下面脚本中的组而不是 DOMAIN\sysdba?
我试图设置 DOMAIN\group 以限制它所建立的连接数量,并保持某些 DOMAIN\users 具有不同数量的连接。
添加了下面来自 SergeyA 的代码。但我仍然缺少这里的逻辑。优先CASE ORIGINAL_LOGIN
。
CREATE TRIGGER Secure_SQL
ON ALL SERVER WITH EXECUTE AS 'sa account'
FOR LOGON
AS
BEGIN
declare @session_cnt int, @is_sysasmin int
select @session_cnt=count(*) from sys.dm_exec_sessions WHERE
is_user_process = 1 AND original_login_name = ORIGINAL_LOGIN()
-- change context to actual user to check if there any sysadmin role
execute as login=original_login()
select @is_sysasmin=count(*) from sys.login_token where name='sysadmin'
REVERT
IF (Select COUNT(1) from sys.dm_exec_sessions WHERE is_user_process = 1 AND original_login_name = ORIGINAL_LOGIN*() ) >
(CASE ORIGINAL_LOGIN()
WHEN 'sa account' THEN 40
WHEN 'DOMAIN\sysdba' THEN 150
WHEN 'DOMAIN\sysdba' THEN 150
ELSE 1
END)
BEGIN
PRINT 'The login [' + ORIGINAL_LOGIN() + '] has exceeeded its current session limit.'
ROLLBACK;;
END
END;