域组的SQL登录触发器

域组的SQL登录触发器,sql,sql-server,triggers,Sql,Sql Server,Triggers,我已经在论坛上做了大量的谷歌搜索和阅读。我找不到任何关于使用添加到SQL中的域组,然后为该组成员运行触发器的答案。顺便提一下我对SQL知之甚少 因此,这适用于SQL帐户: USE master; GO GRANT VIEW SERVER STATE TO admintest; GO CREATE TRIGGER connection_trigger ON ALL SERVER WITH EXECUTE AS 'admintest' FOR LOGON AS BEGIN IF ORIGINAL

我已经在论坛上做了大量的谷歌搜索和阅读。我找不到任何关于使用添加到SQL中的域组,然后为该组成员运行触发器的答案。顺便提一下我对SQL知之甚少

因此,这适用于SQL帐户:

USE master;
GO

GRANT VIEW SERVER STATE TO admintest;
GO

CREATE TRIGGER connection_trigger
ON ALL SERVER WITH EXECUTE AS 'admintest'
FOR LOGON
AS
BEGIN
IF ORIGINAL_LOGIN()= 'admintest' AND
    (SELECT COUNT(*) FROM sys.dm_exec_sessions
            WHERE is_user_process = 1 AND
                original_login_name = 'admintest') > 2
    ROLLBACK;
END;
但是,当我添加已添加到SQL的域安全组时,我得到以下结果:

Msg 15151, Level 16, State 1, Procedure connection_trigger, Line 7
Cannot execute as the login '[testdomain\domain admins]', because it does 
not exist or you do not have permission.
两者拥有完全相同的权限。管理测试工作。然而,如果我添加一个组,我会得到一个错误

无法作为登录名“[testdomain\domain admins]”执行,因为它 不存在或您没有权限

您试图模拟Windows组,但这是不允许的,请阅读文档:

“登录名”

指定在中执行的模块内的语句 登录名中指定的SQL Server登录名的上下文。 验证模块中任何对象的权限 登录名。只能为具有的DDL触发器指定登录名 服务器作用域或登录触发器登录名不能是组角色, 证书、密钥或内置帐户,如NT AUTHORITY\LocalService、NT AUTHORITY\NetworkService或NT 权限\本地系统

然而,这里的主要问题不是您试图模拟一个组,而是您不明白为什么要使用
executeas
子句

当有人执行您的触发器时,他应该能够查看所有会话,而不仅仅是他自己的会话,因此他应该具有查看服务器状态的权限。这就是为什么触发器对被授予此权限的登录名使用
executeas
子句的原因。
因此,在
EXECUTE AS
子句中使用任何具有此权限的登录名,并且完全不需要从Windows组的名称执行触发器,最好在dba.stackexchange网络中询问。建议迁移…对于这类问题,您会有更好的受众。>>>但是当我添加域安全组时,sepupic:domain Admins是一个域安全组。在我开始使用触发器之前,我将其添加到SQL登录中。第十二-谢谢0我问你在你的代码中是在哪里添加的-对此感到抱歉。我用“[exampledomain\domain admins]”替换了admintest,我尝试了不带引号和括号的测试。SQL唯一不高兴的地方(红色曲线)是第7行“作为“[exampledoman\domain admins]”执行-其他部分没有红色错误下划线。Sepupic-非常感谢您花时间回答。我触发了使用“grant server”和“execute as”子句以及“original_login”和“original_login_name”使用SQL帐户的操作我使用了域安全组。因为我正在构建一个没有SQL帐户(雇主指导)和所有域组的框,除了execute as子句之外,是否还可以只使用域帐户部署触发器?如果不是,那很酷。再一次。谢谢您的帮助。@bspencer505对不起,我不明白您的问题是什么。你能描述一下你的触发器应该做什么吗?登录触发器会攻击每一个登录,唯一需要考虑的是OrthalLoLogin的名字将永远不会显示Win组,它将总是显示单赢帐户,因为它是单个帐户登录,而不是群组登录,对所有用户来说是5。“登录触发器将攻击每一个登录,唯一需要考虑的是,OrthalLoLogin名称将永远不会显示Win组,它将总是显示单赢帐户,因为它是单个帐户登录,而不是组-”-完美。谢谢!