我正在尝试使用 CASE 来限制与 SQL 的连接,以监视此处列出的连接。在该案例中,我尝试将 NT AUTHORITY\NETWORK SERVICE 添加到该案例中。然而,当它连接到数据库时,它会因为触发器而立即被删除。但它不会删除我的域帐户。如何让 NETWORK SERVICE 帐户顺利连接。
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 ($is_sysadmin <> 1)
BEGIN
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 'NT AUTHORITY\NETWORK SERVICE' THEN 150 --Account Fails login due to trigger
WHEN 'DOMAIN\sysdba' THEN 150
ELSE 1
END)
BEGIN
PRINT 'The login [' + ORIGINAL_LOGIN() + '] has exceeeded its current session limit.'
ROLLBACK;
END
END
END
因此,通过一些建议和测试帐户操作,我将 NT AUTHORITY\NETWORK SERVICE 更改为 DOMAIN\COMPUTER$,现在可以毫无问题地登录。这是有道理的,因为 SQL 位于计算机上,但看不到计算机服务帐户的本来面目,并且将连接视为计算机连接。