1

最近、SQL Serverに日付を格納するためにAccessアプリケーションを変換しました。フォームは依然としてMS Accessに存在しますが、ファイルDSNを介してSQLサーバーにリンクされています。SQL Serverのログ記録/ユーザー追跡機能

SQLサーバー内のユーザーアクティビティを追跡する機能が問題になりました。

私たちは、SQLサーバー内の個々のユーザーを設定し、おそらく、我々は、ユーザの活動を追跡するために、SQL Serverを使用することができ、ユーザーのコンピュータ上のDSNのを設定するときに、これらの個々のアカウントを使用する場合と推測しています。これは本当ですか?

私たちは現在、SQL Server 2005標準を持っていますが、すぐに2008にアップグレードする予定です。

ありがとうございました!

+0

どのような種類の情報をトラッキングしますか?物事を変えたのは誰ですか?またはビュートラッキングも探していますか?物事 –

+0

は、私はOPは、データへの変更を追跡するだけを望むと想定しました。私はすべての選択を非常に有用なものとして追跡することは想像できませんが、場合によってはそれが可能かもしれないと思います。 –

答えて

1

SQL 2008にアップグレードすると、Change Data Captureになります。

+0

CDCレコードのデータ変更を変更しましたが、ユーザーのアクティビティ –

+0

正しくない – JoshBerke

0

これは本当ですか?

はい、変更を取得するためのテーブルのトリガーは機能します。また、そのような情報の後にログインする場合は、ログインイベントをテーブルに記録するためのサーバー側のトレースを設定することもできます。いくつかのより多くの答えを特定してください。

1

私は現在DDLの変更を追跡していますので、必要な2つの関数とテーブル構造を持つ1つのDDLトリガがあります。コードを実行する前に、データベースのext propsを "DbVersion"(2.3.4など) (例えばDEV、テスト、PROD)「のDbType」とお好みで1で[GA]名前空間を交換するか、1 ... 編集作成:...オブジェクトが新しい場合はnullのバージョンで固定バグを

USE [GA_DEV] 
GO 

/****** Object: DdlTrigger [TraceDbChanges] Script Date: 05/07/2009 11:15:57 ******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 


create trigger [TraceDbChanges] 
on database 
for create_procedure, alter_procedure, drop_procedure, 
create_table, alter_table, drop_table, 
create_function, alter_function, drop_function , 
create_trigger , alter_trigger , drop_trigger 
as 

set nocount on 

declare @data xml 
set @data = EVENTDATA() 
declare @DbVersion varchar(20) 
set @DbVersion =(select ga.GetDbVersion()) 
declare @DbType varchar(20) 
set @DbType =(select ga.GetDbType()) 
declare @DbName varchar(256) 
set @DbName [email protected]('(/EVENT_INSTANCE/DatabaseName)[1]', 'varchar(256)') 
declare @EventType varchar(256) 
set @EventType [email protected]('(/EVENT_INSTANCE/EventType)[1]', 'varchar(50)') 
declare @ObjectName varchar(256) 
set @ObjectName = @data.value('(/EVENT_INSTANCE/ObjectName)[1]', 'varchar(256)') 
declare @ObjectType varchar(25) 
set @ObjectType = @data.value('(/EVENT_INSTANCE/ObjectType)[1]', 'varchar(25)') 
declare @TSQLCommand varchar(max) 
set @TSQLCommand = @data.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'varchar(max)') 
declare @opentag varchar(4) 
set @opentag= '<' 
declare @closetag varchar(4) 
set @closetag= '>' 
declare @newDataTxt varchar(max) 
set @newDataTxt= cast(@data as varchar(max)) 
set @newDataTxt = REPLACE (REPLACE(@newDataTxt , @opentag , '<') , @closetag , '>') 
-- print @newDataTxt 
declare @newDataXml xml 
set @newDataXml = CONVERT (xml , @newDataTxt) 

declare @Version varchar(50) 
set @Version = @newDataXml.value('(/EVENT_INSTANCE/TSQLCommand/CommandText/Version)[1]', 'varchar(50)') 

-- if we are dropping take the version from the existing object 
if (SUBSTRING(@EventType , 0 , 5)) = 'DROP' 
set @Version =(select top 1 [Version] from ga.DbObjChangeLog where [email protected] order by [LogId] desc) 
if (@Version is null) 
set @Version = '1.0.0' 

declare @Description varchar(max) 
set @Description = @newDataXml.value('(/EVENT_INSTANCE/TSQLCommand/CommandText/Description)[1]', 'varchar(max)') 

declare @ChangeDescription varchar(max) 
set @ChangeDescription = @newDataXml.value('(/EVENT_INSTANCE/TSQLCommand/CommandText/ChangeDescription)[1]', 'varchar(max)') 

declare @LoginName varchar(256) 
set @LoginName = @data.value('(/EVENT_INSTANCE/LoginName)[1]', 'varchar(256)') 
declare @FirstName varchar(50) 
set @FirstName= (select [FirstName] from [ga].[LoginsForUsers] where [LoginName] = @LoginName) 
declare @LastName varchar(50) 
set @LastName = (select [LastName] from [ga].[LoginsForUsers] where [LoginName] = @LoginName) 
declare @SchemaName sysname 
set @SchemaName = @data.value('(/EVENT_INSTANCE/SchemaName)[1]', 'sysname'); 
--declare @Description xml 
--set @Description = @data.query('(/EVENT_INSTANCE/TSQLCommand/text())') 




print 'VERSION IS ' + @Version 
print @newDataTxt 
print cast(@data as varchar(max)) 


-- select column_name from information_schema.columns where table_name ='DbObjChangeLog' 
insert into [ga].[DbObjChangeLog] 
(
[DatabaseName] , 
[SchemaName], 
[DbVersion] , 
[DbType], 
[EventType], 
[ObjectName], 
[ObjectType] , 
[Version], 
[Description], 
[ChangeDescription], 
[SqlCommand] , 
[LoginName] , 
[FirstName], 
[LastName] 
) 

values(

@DbName, 
@SchemaName, 
@DbVersion, 
@DbType, 
@EventType, 
@ObjectName, 
@ObjectType , 
@Version, 
@Description, 
@ChangeDescription, 
@newDataTxt, 
@LoginName , 
@FirstName , 
@LastName 
) 


GO 

SET ANSI_NULLS OFF 
GO 

SET QUOTED_IDENTIFIER OFF 
GO 

DISABLE TRIGGER [TraceDbChanges] ON DATABASE 
GO 

ENABLE TRIGGER [TraceDbChanges] ON DATABASE 
GO 
関連する問題