AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 290923
Accepted
Aleksey Vitsko
Aleksey Vitsko
Asked: 2021-05-04 08:06:22 +0800 CST2021-05-04 08:06:22 +0800 CST 2021-05-04 08:06:22 +0800 CST

Implicações do gatilho de logon do SQL Server - existem efeitos colaterais possíveis no meu cenário?

  • 772

Alguns dos desenvolvedores da minha equipe sabem senhas de contas SQL que têm permissões estendidas
Gostaríamos de rastrear e ser alertados sempre que algum desenvolvedor estiver usando qualquer uma dessas contas SQL para se conectar

Estamos prestes a implementar logon triggerisso para cada tentativa de login, avaliar as propriedades do login e enviar um relatório por e-mail se eles corresponderem a determinados critérios. A lógica é a seguinte:

se original_login() em (...lista de contas SQL aqui...) e:
a) o endereço IP do cliente é 192.168.xx sub-rede VPN (nenhum aplicativo de produção se conectando a partir desta sub-rede, somente desenvolvedores podem) ou
b) nome do host do cliente em (... lista de nomes de máquinas host do Dev...) ou
c) nome do aplicativo cliente em (SSMS, az-Data etc.)
exec sp_send_dbmail (enviar relatório por e-mail para o DBA)

O gatilho teria a cláusula "execute as" e seria executado em nome de um logon SQL cuja única permissão é enviar e-mails de db mail

Quais podem ser os efeitos colaterais indesejados de habilitar esse tipo de acionador de logon na produção?
Pode retardar o processo de login ou causar outros problemas?

ps Estou ciente DACe como usá-lo.
Testado conectando usando DACe contando com ele para me ajudar a desativar o gatilho se algum problema começar

sql-server sql-server-2017
  • 3 3 respostas
  • 522 Views

3 respostas

  • Voted
  1. Best Answer
    David Browne - Microsoft
    2021-05-04T09:10:03+08:002021-05-04T09:10:03+08:00

    O correio de banco de dados usa uma fila do Service Broker e um processo em segundo plano assíncrono para realmente enviar emails, portanto, o desempenho não deve ser um grande problema. Mas os acionadores de logon podem facilmente causar tempo de inatividade, por isso exigem muito cuidado ao escrever e testar. Além disso, você pode acabar com milhares de e-mails se um desenvolvedor executar um teste de carga ou algo assim.

    Portanto, provavelmente é um exagero usar um gatilho de logon para isso. Em vez disso, use uma auditoria ou mesmo apenas uma sessão XEvent. Grave os dados em um arquivo de evento e os processe com um trabalho agendado.

    Veja como criar e consultar uma auditoria:

    --ALTER SERVER AUDIT [sa_successful_logon] WITH (STATE = OFF);
    --DROP SERVER AUDIT [sa_successful_logon]
    go
    
    declare @logFolder nvarchar(255) = ( select [path]  from sys.dm_os_server_diagnostics_log_configurations )
    exec('
    CREATE SERVER AUDIT [sa_successful_logon]
    TO  FILE ( FILEPATH = '''+@logFolder+''' )
    WHERE ([server_principal_name]=''sa'');
    ALTER SERVER AUDIT [sa_successful_logon] WITH (STATE = ON);
    ')
    GO
    
    CREATE SERVER AUDIT SPECIFICATION [sa_successful_logon_logon_spec]
    FOR SERVER AUDIT [sa_successful_logon]
    ADD (SUCCESSFUL_LOGIN_GROUP)
    WITH (STATE = ON)
    
    go
    
    declare @log nvarchar(255) = ( select [path] + 'sa_successful_logon*.sqlaudit' from sys.dm_os_server_diagnostics_log_configurations ) 
    SELECT event_time, client_ip, application_name
    FROM sys.fn_get_audit_file (@log,default,default);
    
    • 13
  2. Tibor Karaszi
    2021-05-05T04:30:48+08:002021-05-05T04:30:48+08:00

    Um aspecto que pode não ser o tipo de implicação que você está pedindo, mas a IMO é igualmente importante:

    O nome do aplicativo e o nome do host são definidos pelo aplicativo cliente. Assim, seus desenvolvedores podem se conectar facilmente ao seu SQL Server usando o SSMS e na string de conexão especificar algo como abaixo:

    Nome do aplicativo=MyAppName;ID da estação de trabalho=MickeyMouse

    (Você pode especificar os atributos da cadeia de conexão na caixa de diálogo "Conectar" do SSMS.)

    Não posso dizer com certeza sobre o endereço IP, se é "seguro" de usar.

    • 1
  3. Viraj Sawant
    2021-05-07T02:39:34+08:002021-05-07T02:39:34+08:00

    Você pode tentar este gatilho:

    CREATE TRIGGER [logon_trigger_not_from_SSMS] 
    ON ALL SERVER FOR LOGON
    AS
      BEGIN
        IF APP_NAME() LIKE '%Microsoft SQL Server Management Studio%' --app name check
          BEGIN
          --the only persons allowed to use SSMS
            IF suser_name() not IN ('sa','DBA_LOGINS') 
            and suser_name() not like 'dev[_]%' 
                            
                 BEGIN
                    ROLLBACK --Logins other than above mention logins are not allowed to connect through SSMS
                 END 
          END 
                      
           
      END 
    
    • 0

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve