Kvalitetsgranskning av databasmodell, SQL kod, databassäkerhet, backup/restore rutiner, utvecklingsrutiner och driftrutiner. Denna granskning syftar till…
Först lite grundläggande information om Default Trace.
Default Trace är en fördefinierad profiler trace som körs som en ”server side trace”. Listan på vilka events som denna trace fångar finns i slutet av denna blogpost.
När du installerar SQL Server så kommer den att som standard starta med Default Trace igång. Har du inte inaktiverat den så har du en källa med massa rolig information du kan ha nytta av i ditt jobb som DBA.
Vill du kontrollera om Default trace är igång eller inte kan du köra detta script:
SELECT * FROM sys.configurations WHERE name like 'default trace enabled'
Om Default Trace är avaktiverad kan man slå på den genom SP_CONFIGURE:
USE master; GO EXEC sp_configure 'show advanced option','1'; reconfigure go exec sp_configure 'default trace enabled',1 reconfigure GO
Vart hittar jag Default Trace?
Default Trace filerna är max 5 till antalet. SQL skriver till en fil och byter antingen när filen blivit 20 mb stor eller när SQL tjänsten startas. Det betyder att man inte kan ha mer än 100 MB och därför är det heller ingen risk att man fyller disken med massa gammal data.
Default trace skrivs som sagt till fil och du hittar den fysiska platsen t ex genom
SELECT * FROM ::fn_trace_getinfo(0)
För att hitta vem som la till ett login i en Server Role finns det några event man kan filtrera ut.
Dessa 4 tycker jag är intressanta i just detta case:
104 | Audit Addlogin Event |
105 | Audit Login GDR Event |
106 | Audit Login Change Property Event |
108 | Audit Add Login to Server Role Event |
Bra att veta är att det finns inget speciellt event för ”DROP Member” utan dom fångas under samma eventclass som ”ADD Member”.
Jag har lagt till ett nytt konto på min test-server. Lade till detta login in SYSADMIN-rollen, tog bort det och tog sedan även bort detta login.
Här är ett script utformat för att fånga relevant information för dessa event:
DECLARE @path NVARCHAR(260); SELECT @path = REVERSE(SUBSTRING(REVERSE([path]), CHARINDEX(CHAR(92), REVERSE([path])), 260)) + N'log.trc' FROM sys.traces WHERE is_default = 1; SELECT loginname, textdata, RoleName, TargetLoginName, starttime, e.name as EventName, hostname, applicationname, servername, databasename, objectName, e.category_id, cat.name, duration, eventclass, eventsubclass, loginsid, endtime, spid FROM sys.fn_trace_gettable(@path, DEFAULT) INNER JOIN sys.trace_events e ON eventclass = trace_event_id INNER JOIN sys.trace_categories AS cat ON e.category_id = cat.category_id WHERE EventClass IN (104,105,106,108) ORDER BY StartTime DESC;
Här är resultatet av mitt script kört i min test-server och resultatet är rätt avslöjande.
Notera att även om man inte får all information om t ex event 104 så kan man genom eventsubclass se om det handlar om att man lagt till eller tagit bort ett LOGIN (eventsubclass 1 = add login, 2 = Drop Login).
Detta är bara några få av alla events som man kan hitta i Default Trace. Nedan ser du en lista på alla events som fångas upp. Nu kan du prova själv och testa vilken information du har mest nytta av!
eventid | Name |
18 | Audit Server Starts And Stops |
20 | Audit Login Failed |
22 | ErrorLog |
46 | Object:Created |
47 | Object:Deleted |
55 | Hash Warning |
69 | Sort Warnings |
79 | Missing Column Statistics |
80 | Missing Join Predicate |
81 | Server Memory Change |
92 | Data File Auto Grow |
93 | Log File Auto Grow |
94 | Data File Auto Shrink |
95 | Log File Auto Shrink |
102 | Audit Database Scope GDR Event |
103 | Audit Schema Object GDR Event |
104 | Audit Addlogin Event |
105 | Audit Login GDR Event |
106 | Audit Login Change Property Event |
108 | Audit Add Login to Server Role Event |
109 | Audit Add DB User Event |
110 | Audit Add Member to DB Role Event |
111 | Audit Add Role Event |
115 | Audit Backup/Restore Event |
116 | Audit DBCC Event |
117 | Audit Change Audit Event |
152 | Audit Change Database Owner |
153 | Audit Schema Object Take Ownership Event |
155 | FT:Crawl Started |
156 | FT:Crawl Stopped |
157 | FT:Crawl Aborted |
164 | Object:Altered |
167 | Database Mirroring State Change |
175 | Audit Server Alter Trace Event |
218 | Plan Guide Unsuccessful |