none
XQuery RRS feed

  • Pergunta

  • Comunidade, boa noite.

    Estou criando uma rotina de auditoria em um servidor seguindo uma video aula que vi da SQL Magazine.
    Porem eu gostaria de acrescentar masi uma informação que é o host da maquina do usuario, mas nao estou conseguindo.

    Segue a linha de codigo

    CAST

     

    (@message_body.query('/EVENT_INSTANCE/HostName/text()') as sysname)

    Porem nao me retorna nada.

    Alguem poderia me ajudar ?

    terça-feira, 28 de julho de 2009 22:57

Respostas

  • Ola TC,

    Sim é possível, utilize o evento DDL_PROCEDURES_EVENTS

    Segue um mapa bem legal no bol sobre os DDL_EVENTS

    ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.en/udb9/html/43a218ba-1c9b-43cb-bd5b-4f5957d30970.htm

    Abraços
    Marcelo Fernandes


    MCP, MCDBA, MCSA, MCTS. Se útil, classifique!!!
    sexta-feira, 31 de julho de 2009 11:55

Todas as Respostas

  • TC

    Acredito que vc esta implementando o Event Notification, passei por ete problema, a solução foi uma funcção de sistema

    select suser_sname(),HOST_NAME ()
    


    Att.
    Marcelo Fernandes
    MCP, MCDBA, MCSA, MCTS. Se útil, classifique!!!
    quarta-feira, 29 de julho de 2009 11:51
  • Marcelo eis o código que estou usando....



    INSERT INTO [dbo].[LoggedEvents] ( EventType, EventTime, LoginName, UserName, ServerName, DatabaseName, SchemaName, ObjectName, ObjectType, TSQLCmdText ---,Event_Data ) VALUES ( CAST(@message_body.query('/EVENT_INSTANCE/EventType/text()') AS NVARCHAR(256)), CAST(CAST(@message_body.query('/EVENT_INSTANCE/PostTime/text()') AS NVARCHAR(MAX)) AS DATETIME), CAST(@message_body.value('/EVENT_INSTANCE/LoginName/text()') as sysname), CAST(@message_body.query('/EVENT_INSTANCE/UserName/text()') AS sysname), CAST(@message_body.query('/EVENT_INSTANCE/ServerName/text()') AS sysname), CAST(@message_body.query('/EVENT_INSTANCE/DatabaseName/text()') AS sysname), CAST(@message_body.query('/EVENT_INSTANCE/SchemaName/text()') AS sysname), CAST(@message_body.query('/EVENT_INSTANCE/ObjectName/text()') AS sysname), CAST(@message_body.query('/EVENT_INSTANCE/ObjectType/text()') AS sysname), CAST(@message_body.query('/EVENT_INSTANCE/TSQLCommand/CommandText/text()') AS NVARCHAR(MAX)) ---,@data ) END
    quarta-feira, 29 de julho de 2009 14:27
  • Thiago,

    Como você esta obtendo os dados do Event Notification?


    Pedro Antonio Galvão Junior - MVP - Windows Server System - SQL Server/Coordenador de Projetos/DBA
    quarta-feira, 29 de julho de 2009 14:51
  • Junior, boa tarde.

    Estou criando uma Queue e após isso um serviço para essa Queue.

    quarta-feira, 29 de julho de 2009 17:25
  • TC.

    Segue um link que usei como base p/ uma atividade que fiz com o event notification
    http://www.simple-talk.com/sql/sql-server-2005/logon-triggers/


    Segue trecho do codigo que te falei.

    DECLARE @data XML, @ObjName varchar(50), @EventTp varchar(25)
        SET @data = EVENTDATA()
        SET @ObjName=@data.value('(/EVENT_INSTANCE/ObjectName)[1]', 'VARCHAR(50)')
        SET @EventTp=@data.value('(/EVENT_INSTANCE/EventType)[1]', 'VARCHAR(25)')
    
        INSERT TB_Audit
        VALUES ( GETDATE(), @@spid,host_name(), CONVERT(nvarchar(100), CURRENT_USER), 
                @EventTp,@ObjName,@data);


    Att.
    Marcelo Fernandes
    MCP, MCDBA, MCSA, MCTS. Se útil, classifique!!!
    quarta-feira, 29 de julho de 2009 17:40
  • Boa Tarde,

    O valor do nó HostName nem sempre será igual ao da function host_name, pois, o usuário que fez a notificação disparar, pode não ser o mesmo que está fazendo com que ela seja logada (principalmente se as mensagens forem transmitidas entre servidores diferentes). Eu sugiro que você armazene o XML e tente ver porquê a XPath não está recuperando o valor corretamente. Vale a pena lembrar que a XQuery é sensitive.

    Fiz uma apresentação sobre Event Notification na revista Mundo.NET e utilizo o hostname sem problemas...

    [ ]s,
     
    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com

    Mitos do SQL Server – Será que COUNT(1) ou COUNT('X') são mais performáticos que COUNT(*) ?
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!658.entry


    Classifique as respostas. O seu feedback é imprescindível
    quarta-feira, 29 de julho de 2009 17:52
  • Comunidade, bom dia.

    Uma solução que eu poderia fazer também poderia ser um TRIGGER DDL que dispare a qualquer evento de CREATE, ALTER e DROP_PROCEDURE.

    Eu consigo fazer apenas para esses eventos ?

    sexta-feira, 31 de julho de 2009 11:32
  • Ola TC,

    Sim é possível, utilize o evento DDL_PROCEDURES_EVENTS

    Segue um mapa bem legal no bol sobre os DDL_EVENTS

    ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.en/udb9/html/43a218ba-1c9b-43cb-bd5b-4f5957d30970.htm

    Abraços
    Marcelo Fernandes


    MCP, MCDBA, MCSA, MCTS. Se útil, classifique!!!
    sexta-feira, 31 de julho de 2009 11:55