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 / 56930
Accepted
Kin Shah
Kin Shah
Asked: 2014-01-17 10:11:46 +0800 CST2014-01-17 10:11:46 +0800 CST 2014-01-17 10:11:46 +0800 CST

Existe uma maneira de descobrir quem mudou a senha para um login?

  • 772

Estou tentando descobrir quem alterou a senha de um login no SQL Server 2008 R2.

Já verifiquei o rastreamento padrão - e ele não registra esse evento. O rastreamento padrão incluirá estes eventos relacionados à segurança:

/*
    Audit Add DB user event
    Audit Add login to server role event
    Audit Add Member to DB role event
    Audit Add Role event
    Audit Add login event
    Audit Backup/Restore event
    Audit Change Database owner
    Audit DBCC event
    Audit Database Scope GDR event (Grant, Deny, Revoke)
    Audit Login Change Property event
    Audit Login Failed
    Audit Login GDR event
    Audit Schema Object GDR event
    Audit Schema Object Take Ownership
    Audit Server Starts and Stops 
*/

Além disso, examinei o backup do log de transações para descobrir isso, mas sem sorte.

Existe alguma outra maneira de descobrir?

Além disso, estou ciente de que um rastreamento do lado do servidor ajudará, mas, infelizmente, em nosso rastreamento do lado do servidor, não incluímos o arquivo Audit Login Change Password Event.

O melhor artigo que encontrei é de Aaron Bertrand: Rastreando alterações de senha de login no SQL Server

security sql-server-2008-r2
  • 3 3 respostas
  • 14777 Views

3 respostas

  • Voted
  1. Best Answer
    Aaron Bertrand
    2014-01-17T10:23:25+08:002014-01-17T10:23:25+08:00

    Meu artigo ajudará se você configurar com antecedência, mas não quando o evento aconteceu no passado e você não tinha nenhum tipo de mecanismo de auditoria configurado.

    Ainda há esperança, no entanto. Digamos que eu fiz isso:

    CREATE LOGIN flooberella WITH PASSWORD = N'x', CHECK_POLICY = OFF;
    

    Essas informações estão no rastreamento padrão em EventClass 104 (Audit Addlogin Event). No entanto, se eu alterar a senha usando um destes métodos:

    ALTER LOGIN flooberella WITH PASSWORD = N'y';
    
    EXEC sp_password N'y', N'z', N'flooberella';
    

    Esses eventos não são capturados pelo rastreamento padrão, por motivos óbvios de segurança - não deve ser possível para ninguém com acesso ao rastreamento padrão descobrir qual é a senha de outra pessoa, nem eles querem facilitar a descoberta disso uma senha foi alterada (a sondagem da frequência desses eventos, por exemplo, pode revelar certas propriedades de sua estratégia de segurança).

    Então o que mais você faz? Embora isso dependa das informações que ainda estão no log e também do uso de um comando DBCC não documentado em um banco de dados do sistema (você pode querer fazer backup do mestre e restaurá-lo em outro lugar), você pode obter algumas informações do log de transações, por exemplo:

    DBCC LOG(master, 1);
    

    Isso produzirá, para os dois comandos acima, linhas com as seguintes informações (parciais):

    Current LSN             Description
    ======================  ======================================================================
    000000f2:000001b8:0002  ALTER LOGIN;0x01050000000000051500000093a3bcd7a9f8fb1417ab13bce8030000
    000000f2:000001b8:0004  Alter login change password;0x01050000000000 ... same sid as above ...
    

    Não parece muito, mas agora pegue essa parte 0x da descrição e faça:

    SELECT name FROM sys.server_principals
      WHERE sid = 0x01050000000000051500000093a3bcd7a9f8fb1417ab13bce8030000;
    

    Arma fumegante! Esta é a pessoa responsável por esse evento.

    Claro, se eles usam ALTER LOGINsintaxe para todas as operações (que deveriam estar usando em vez de sp_password), você não pode distinguir entre alguém alterando o banco de dados padrão e alguém alterando a senha. Você também não pode dizer (pelo menos que eu possa ver) qual login foi afetado, apenas que essa pessoa alterou um login. Jon parece pensar que essa informação também está no log, mas não consegui encontrá-la (ao contrário da informação de tempo, que de alguma forma eu passei direto).


    Pode haver respostas diferentes para usuários contidos no SQL Server 2012 - embora eu suspeite que as alterações de senha ainda sejam ofuscadas de maneiras semelhantes. Vou deixar isso para uma pergunta separada.

    • 11
  2. Remus Rusanu
    2014-01-17T13:18:21+08:002014-01-17T13:18:21+08:00

    isso é mais do que um comentário, postando como resposta

    select top(10) 
        [Transaction ID], 
        [Begin Time], 
        [Transaction Name], 
        [Transaction SID],
        SUSER_SNAME([Transaction SID])
    from fn_dblog(null, null)
    where Operation = 'LOP_BEGIN_XACT';
    
    Transaction ID Begin Time               Transaction Name                  Transaction SID
    -------------- ------------------------ --------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    0000:00002b12  2014/01/08 20:10:14:890  Event_Session_Startup             NULL
    0000:00002b13  2014/01/08 20:10:15:027  DBMgr::StartupDB                  NULL
    0000:00002b14  2014/01/08 20:10:15:513  AddGuestUserToTempdb              NULL
    0000:00002b15  2014/01/08 20:10:15:537  DBMgr::StartupDB                  NULL
    0000:00002b16  2014/01/08 20:10:15:537  DBMgr::StartupDB                  NULL
    0000:00002b17  2014/01/08 20:10:15:537  DBMgr::StartupDB                  NULL
    0000:00002b18  2014/01/08 20:10:15:540  DBMgr::StartupDB                  NULL
    0000:00002b19  2014/01/08 20:10:15:550  DBMgr::StartupDB                  NULL
    0000:00002b1a  2014/01/11 11:49:42:760  AutoCreateQPStats                 0x010500000000000515000000A065CF7E784B9B5FE77C877084B65600
    0000:00002b1b  2014/01/11 11:53:26:620  test_ack                          0x010500000000000515000000A065CF7E784B9B5FE77C877084B65600
    
    (10 row(s) affected)
    
    • 4
  3. Ivan Stankovic
    2014-01-22T13:42:36+08:002014-01-22T13:42:36+08:00

    Você pode utilizar o gatilho DDL no nível do servidor (observe que, para este exemplo, você deve ter o recurso SQL Server Database Mail ativado e definido):

    CREATE Trigger [Trg_TrackLoginManagement]
    on ALL Server
    for DDL_LOGIN_EVENTS
    as
    set nocount on
    declare @data xml,
              @EventType varchar(100),
              @EventTime datetime,
              @ServerName varchar(100),
              @AffectedLoginName varchar(100),
              @WhoDidIt varchar(100),
              @EmailSubject varchar(500),
              @EmailBody varchar(800),
              @EmailRecipients varchar(300)
    set @EmailRecipients = '[email protected]'
    set @data = eventdata()
    set @EventType = @data.value('(/EVENT_INSTANCE/EventType)[1]', 'varchar(100)')
    set @EventTime = @data.value('(/EVENT_INSTANCE/PostTime)[1]','datetime')
    set @ServerName = @data.value('(/EVENT_INSTANCE/ServerName)[1]','varchar(100)')
    set @AffectedLoginName = @data.value('(/EVENT_INSTANCE/ObjectName)[1]','varchar(100)')
    set @WhoDidIt = @data.value('(/EVENT_INSTANCE/LoginName)[1]','varchar(100)')
    
    set @EmailSubject = 'ALERT: DDL_LOGIN_Event: ' + @EventType + ' occured by ' + @WhoDidIt + ' on ' + @ServerName
    
    set @EmailBody =  'DDL_Login_Event: ' + @EventType + char(10) + 
                     'Event Occured at: ' + convert(Varchar, @EventTime) + char(10) + 
                     'ServerName: ' + @ServerName + char(10) +
                     'Affected Login Name:      ' + @AffectedLoginName + char(10) + 
                     'Event Done by: ' + @WhoDidIt
    EXEC msdb.dbo.sp_send_dbmail
        @recipients = @EmailRecipients,
        @body = @EmailBody,
        @subject = @EmailSubject ;
    GO
    
    • 1

relate perguntas

  • Que ameaças de segurança a conta SA e outros nomes de contas conhecidos representam para a segurança?

  • Segurança para desenvolvedores de aplicativos que trabalham com PL/SQL no Oracle

  • credenciais de login diferentes com base no usuário

  • Os procedimentos armazenados impedem a injeção de SQL?

  • Protegendo senhas de banco de dados

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