האח הגדול עינו פקוחה (2) – מי התחבר לשרת?

יום שישי, ינואר 22, 2010

אנחנו ממשיכים במלאכת המעקב החשאית- לא רק מי שינה דברים (הפוסט הקודם), אלא גם- מי התחבר.. קודם כל ניצור טבלת מעקב ב-master: USE master GO CREATE TABLE T_Maakav(Taarih datetime, varchar(128), varchar(128), varchar(128), char(10), varchar(128), smallint) GO וכעת ניצור טריגר DDL מתאים: Create TRIGGER Prevent_Apps_logon ON ALL SERVER FOR LogOn AS BEGIN Insert Into T_Maakav Select GetDate() Taarih, User_Name() ,System_User , App_Name(), Host_ID( ) , Host_Name( ) , @@SPID Where OBJECT_ID('master.dbo.T_Maakav') Is Not Null And App_Name()<>'Report Server' END תנאי ה-Where הראשון הוא קריטי: בלעדיו אנחנו עלולים להיתקע מחוץ לשרת מבלי יכולת להיכנס, אם מישהו בטעות ימחק את טבלת המעקב! התנאי השני נועד להדגים כיצד לסנן הודעות מיותרות: הטבלה תתמלא מהר מאוד על ידי תהליכים שרצים ברקע ומתחברים...
אין תגובות

האח הגדול עינו פקוחה – תיעוד כל השינויים בדטבייס

יום חמישי, ינואר 21, 2010

הגיע הזמן לגלות מי עשה מה ומתי, ועם החומר המרשיע לזמן את החשודים לחדר החקירות! ניצור טבלת מעקב: Create Table DDLEventLog(Taarih DateTime Null, UserName SysName Null, ObjectName SysName Null, CommandText VarChar(Max) Null, EventType VarChar(Max) Null, DatabaseName VarChar(Max) Null, SchemaName VarChar(Max) Null, SpID VarChar(Max) Null, LoginName VarChar(Max) Null); ניצור טריגר DDL שיתעד לטבלה כל פיפס: Create Trigger TrgEventLog On Database For DDL_Database_Level_Events As Insert Into DDLEventLog(Taarih, UserName, ObjectName, CommandText, EventType, DatabaseName, SchemaName, SpID, LoginName) Select EventData().value('(/EVENT_INSTANCE/PostTime)', 'DateTime') Taarih, EventData().value('(/EVENT_INSTANCE/UserName)','VarChar(Max)') UserName, EventData().value('(/EVENT_INSTANCE/ObjectName)','VarChar(Max)') ObjectName, EventData().value('(/EVENT_INSTANCE/TSQLCommand/CommandText)','VarChar(Max)') CommandText, EventData().value('(/EVENT_INSTANCE/EventType)','VarChar(Max)') EventType, EventData().value('(/EVENT_INSTANCE/DatabaseName)','VarChar(Max)') DatabaseName, EventData().value('data(/EVENT_INSTANCE/SchemaName)','VarChar(Max)') SchemaName, EventData().value('(/EVENT_INSTANCE/SPID)', 'VarChar(Max)') SpID, EventData().value('(/EVENT_INSTANCE/LoginName)','VarChar(Max)') LoginName; וכעת לבדיקה ננסה ליצור טבלה, לבטל אותה, ולראות מה מופיע בטבלת המעקב: Create Table MyTest(I Int); Go Drop Table MyTest; Go Select * From DDLEventLog;
אין תגובות