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 / 299624
Accepted
Murali Dhar Darshan
Murali Dhar Darshan
Asked: 2021-09-16 04:39:38 +0800 CST2021-09-16 04:39:38 +0800 CST 2021-09-16 04:39:38 +0800 CST

Como saber qual aplicativo ou usuário colocou o Banco de Dados SQL Server no modo de usuário único

  • 772

No meu caso, existe o Banco de Dados SQL Server que é usado por várias equipes. O banco de dados de repente entrou no modo de usuário único. Agora, como identificar o usuário ou aplicativo responsável que fez isso? Pode ser um aplicativo também.

Se não for possível agora, o que fazer para capturar essas informações no futuro?

sql-server locking
  • 3 3 respostas
  • 1217 Views

3 respostas

  • Voted
  1. Aaron Bertrand
    2021-09-16T05:04:13+08:002021-09-16T05:04:13+08:00

    O spid é registrado no log de erros do SQL Server, mas não o usuário/aplicativo/host. E, como Grant mencionou, nada é registrado na system_healthsessão interna (ou no rastreamento padrão, se você ainda tiver ativado ).

    EXEC sys.sp_readerrorlog 0, 1, 'single_user';
    

    Resultados:

    LogDate                   ProcessInfo   Text
    -----------------------   -----------   ------------------------------------
    2021-09-15 08:54:02.227   spid60        Setting database option SINGLE_USER 
                                            to ON for database 'blat'.
    

    Para obter essas informações no futuro, você pode configurar uma sessão de eventos estendidos, por exemplo

    CREATE EVENT SESSION [CatchAlterDatabase] ON SERVER 
    ADD EVENT sqlserver.object_altered
    (
      ACTION
      (
        sqlserver.client_app_name, sqlserver.client_hostname, 
        sqlserver.server_principal_name, sqlserver.sql_text
      ) WHERE ([object_type] = 'DATABASE')
    )
    ADD TARGET package0.event_file
    (
      SET filename = N'CatchAlterDB.xel', 
        max_file_size=(25), max_rollover_files=(10)
    )
    WITH 
    (
      MAX_MEMORY=4096 KB, EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,
      MAX_DISPATCH_LATENCY=30 SECONDS, MAX_EVENT_SIZE=0 KB, 
      TRACK_CAUSALITY=OFF,STARTUP_STATE=ON
    );
    GO
    
    ALTER EVENT SESSION CatchAlterDatabase ON SERVER STATE = START;
    

    Ao clicar com o botão direito do mouse na sessão em Gerenciamento > Eventos estendidos > Sessões e escolher Assistir a dados ao vivo (ou ir para o arquivo de evento e escolher Visualizar dados de destino...), você pode ver eventos como este (observe que o banco de dados de destino está realmente listado em object_name; database_nameé o banco de dados de contexto ):

    insira a descrição da imagem aqui

    Mas você também obterá todos os outros eventos de alteração do banco de dados. Vou deixar como exercício para o leitor puxar os dados programaticamente (e filtrar) usando sys.fn_xe_file_target_read_file(docs aqui) . Grant Fritchey tem uma consulta inicial aqui .

    Existem outras opções também, como SQL Server Audit / DATABASE_OBJECT_CHANGE_GROUP.

    • 13
  2. Best Answer
    John K. N.
    2021-09-16T05:27:01+08:002021-09-16T05:27:01+08:00

    As versões modernas do SQL Server permitirão que você crie uma Auditoria de Segurança do Servidor . Eles são um pouco como os eventos estendidos, mas mais enxutos.

    Um script básico para configurar as auditorias do SQL Server Security pode ser assim:

    Criar auditoria de segurança do servidor

    USE [master]
    GO
    
    
    /****** Object:  Audit [ServerSecurityAudit2021]    Script Date: 03.03.2021 12:39:07 ******/
    CREATE SERVER AUDIT [ServerSecurityAudit2021]
    TO FILE 
    (   FILEPATH = N'E:\MSSQL13.INSTANCENAME\MSSQL\Log\'
        ,MAXSIZE = 256 MB
        ,MAX_FILES = 10
        ,RESERVE_DISK_SPACE = OFF
    )
    WITH
    (   QUEUE_DELAY = 1000
        ,ON_FAILURE = CONTINUE
    )
    

    Especificar detalhes da auditoria de segurança

    USE [master]
    GO
    
    CREATE SERVER AUDIT SPECIFICATION [ServerSecurityAuditSpecs2021]
    FOR SERVER AUDIT [ServerSecurityAudit2021]
    ADD (DATABASE_CHANGE_GROUP),
    ADD (FAILED_LOGIN_GROUP)
    -- , ADD (USER_CHANGE_PASSWORD_GROUP)
    -- , ADD (SERVER_PERMISSION_CHANGE_GROUP)
    -- , ADD (SERVER_ROLE_MEMBER_CHANGE_GROUP)
    -- , ADD (LOGIN_CHANGE_PASSWORD_GROUP)
    WITH (STATE = ON)
    GO
    

    Comentei alguns dos Grupos e Ações de Ação de Auditoria do SQL Server. Uma lista dos quais pode ser encontrada em Grupos e ações de ações de auditoria do SQL Server (Microsoft | SQL Docs)

    Ativar auditoria de segurança

    ALTER SERVER AUDIT [ServerSecurityAudit2021] WITH (STATE = ON)
    GO
    

    Referência: CREATE SERVER AUDIT (Transact-SQL) (Microsoft | SQL Docs)

    Usando SSMS

    Você pode fazer o mesmo com o SSMS seguindo as etapas descritas em Criar uma auditoria de servidor e especificação de auditoria de banco de dados (Microsoft | SQL Docs).

    Visualizando a Auditoria do Servidor

    No SSMS de sua instância, navegue até Segurança | Auditorias | Your_Audit_Name e clique com o botão direito do mouse na auditoria e selecione View Audit Logs .

    SSMS Exibir logs de auditoria

    Você pode então selecionar o ID de ação ALTER e ele exibirá os detalhes do que aconteceu.

    Detalhes do registro de auditoria

    Detalhes redigidos para proteger os inocentes

    • 9
  3. Grant Fritchey
    2021-09-16T05:11:05+08:002021-09-16T05:11:05+08:00

    Você não pode saber depois do fato. Eu verifiquei e system_health não captura essas informações. No entanto, você pode configurar eventos estendidos para capturar exatamente isso no futuro. Eu tenho exemplos de mudanças de banco de dados de auditoria aqui . Não mostro a configuração para SINGLE_USER, mas o exemplo em que altero o nível de compatibilidade seria absolutamente aplicável.

    • 8

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