Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 В результате срабатывания триггера не выводит информацию о hostname  [new]
andrew shalaev
Member

Откуда: Moscow
Сообщений: 610
Доброго времени суток!
СУБД: Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86) Nov 24 2008 13:01:59 Copyright (c) 1988-2005 Microsoft Corporation Developer Edition on Windows NT 5.2 (Build 3790: Service Pack 2)

Есть DDL триггер for all server, который срабатывает на события alter\drop\create database:

+

create TRIGGER [DBAAudit_ALTER_Database]
ON ALL Server
FOR ALTER_Database, Drop_Database, Create_Database  -- Captures a Create Database Event
AS
     
DECLARE
@eventdata XML
select @eventdata = EVENTDATA()

 insert into master.dbo.AlterDatabaseDDLEvent
(
[Date],[ServerName],[LoginName],[event_type],[spid],[host_name],[database_name],[t-sql],[app_name]
)
values
(


 @eventdata.value('(/EVENT_INSTANCE/PostTime)[1]', 'datetime'),
         @eventdata.value('(/EVENT_INSTANCE/ServerName)[1]', 'sysname'),
         @eventdata.value('(/EVENT_INSTANCE/LoginName)[1]', 'sysname'),
         @eventdata.value('(/EVENT_INSTANCE/EventType)[1]', 'sysname'),
         @eventdata.value('(/EVENT_INSTANCE/SPID)[1]', 'int'),
         @eventdata.value('(/EVENT_INSTANCE/ClientHost)[1]', 'sysname'), 
		 @eventdata.value('(/EVENT_INSTANCE/DatabaseName)[1]','sysname' ),
		 @eventdata.value('(/EVENT_INSTANCE/TSQLCommand)[1]','sysname' ),  
             App_Name()
)
 



В итоге все поля в таблице заполняются нормально, кроме [host_name], оно идет NULL.
Есть у меня похожий триггер на логон, там такая же конструкция нормально возвращает имя клиентского хоста. Кто нить знает почему в триггере на события alter\drop\create database нет инфы по клиентской машине?
16 окт 13, 10:41    [14978376]     Ответить | Цитировать Сообщить модератору
 Re: В результате срабатывания триггера не выводит информацию о hostname  [new]
Glory
Member

Откуда:
Сообщений: 104760
andrew shalaev
Кто нить знает почему в триггере на события alter\drop\create database нет инфы по клиентской машине?


<ClientHost>
Contains the host name of the client from where the connection is made. The value is '<local_machine>' if the client and server name are the same. Otherwise, the value is the IP address of the client.
16 окт 13, 10:46    [14978410]     Ответить | Цитировать Сообщить модератору
 Re: В результате срабатывания триггера не выводит информацию о hostname  [new]
Guf
Member

Откуда: Новосибирск
Сообщений: 647
andrew shalaev,

https://www.sql.ru/forum/1046845/audit-poluchit-vmesto-ip-imya-komputera
Только внимательно почитайте мнения других участников.
16 окт 13, 10:50    [14978440]     Ответить | Цитировать Сообщить модератору
 Re: В результате срабатывания триггера не выводит информацию о hostname  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
andrew shalaev
Кто нить знает почему в триггере на события alter\drop\create database нет инфы по клиентской машине?
Потому что для перечисленных событий этой информации нет в eventdata.
16 окт 13, 11:14    [14978619]     Ответить | Цитировать Сообщить модератору
 Re: В результате срабатывания триггера не выводит информацию о hostname  [new]
Гость333
Member

Откуда:
Сообщений: 3683
andrew shalaev,

xsd-схема для функции EVENTDATA опубликована здесь: http://schemas.microsoft.com/sqlserver/2006/11/eventdata/events.xsd (можно найти, потыкав по ссылкам в статье BOL про EVENTDATA).

Поизучав xsd, можно увидеть, что ClientHost заполняется только для события EVENT_INSTANCE_LOGON. А для события EVENT_INSTANCE_CREATE_DATABASE заполняется следующее:
	<xs:complexType name="EVENT_INSTANCE_CREATE_DATABASE">
		<xs:sequence>
			<!-- Basic Envelope -->
			<xs:element name="EventType" type="SSWNAMEType"/>
			<xs:element name="PostTime" type="xs:string"/>
			<xs:element name="SPID" type="xs:int"/>

			<!-- Server Scoped DDL -->
			<xs:element name="ServerName" type="PathType"/>
			<xs:element name="LoginName" type="SSWNAMEType"/>

			<!-- Main Body -->
			<xs:element name="DatabaseName" type="SSWNAMEType" />
			<xs:element name="TSQLCommand" type="EventTag_TSQLCommand"/>
		</xs:sequence>
	</xs:complexType>
16 окт 13, 11:32    [14978744]     Ответить | Цитировать Сообщить модератору
 Re: В результате срабатывания триггера не выводит информацию о hostname  [new]
andrew shalaev
Member

Откуда: Moscow
Сообщений: 610
В итоге воспользвался
HOST_NAME()

Спасибо всем за ответы.
16 окт 13, 11:33    [14978752]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить