Estou criando um gatilho no SQL Server 2019 para proteger o número de conexões que os usuários podem ter no meu servidor SQL.
Estou tendo problemas para obter acesso aos meus SYSDBAs usando o grupo de domínio. Prefiro fazer isso em vez de identificar cada usuário no gatilho.
Como identifico o grupo no script abaixo em vez de DOMAIN\sysdba?
Estou tentando definir o grupo DOMAIN para limitar o número de conexões que ele faz e manter determinados usuários de DOMAIN com um número diferente de conexões.
Adicionado código de SergeyA abaixo. Ainda assim, estou perdendo a lógica aqui. O CASE ORIGINAL_LOGIN
está tendo precedência.
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;
se você quiser verificar se o login é membro da função de servidor sysadmin por meio de algum grupo que você pode executar
atualizar.
O problema é: para visualizar sys.dm_exec_sessions a conta precisa ter permissão VIEW SERVER STATE mas sys.login_token retorna informações sobre sua própria sessão. Acho que a solução poderia ser mudar o contexto para ORIGINAL_LOGIN()
Obrigado ao @SergeyA pelo suporte com o código e a lógica. Essa era a lógica que eu precisava para conseguir o
sysadmin
grupo. Usando isso eu usei como uma consulta para fazer uma variável para o usuário ser um arquivosysadmin
. Se estiverem, deveriam ter acesso ilimitado. Então limitei as outras contas.