Estou tentando limitar as conexões ao meu SQL usando um CASE para monitorar as conexões conforme descrito aqui . No CASE estou tentando adicionar o NT AUTHORITY\NETWORK SERVICE ao caso. No entanto, quando ele se conecta ao banco de dados, ele é imediatamente descartado por causa do Trigger. Mas isso não elimina minhas contas de domínio. Como faço para que a conta NETWORK SERVICE se conecte sem problemas.
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
Então, brincando com algumas sugestões e testando ações da conta, mudei NT AUTHORITY\NETWORK SERVICE para DOMAIN\COMPUTER$ e agora ele pode fazer login sem problemas. Isso faz sentido, pois o SQL está na máquina, mas não vê as contas de serviço dos computadores como elas são e vê a conexão como uma conexão de computador.