8
8
-- in SSMS, use Tools -> Options -> Query Results -> SQL Server -> Results to Grid -> Retain CR/LF on copy or save
9
9
-- then open/close SSMS
10
10
11
+ -- You may also have to change the "Maximum Number of Characters displayed in each column from the default.
12
+ -- in SSMS, use Tools -> Options -> Query Results -> SQL Server -> Results to Text window
13
+ -- then open/close SSMS window
11
14
12
15
use master
13
16
GO
14
- select
15
- ' USE [master]
17
+ SET NOCOUNT ON
18
+ GO
19
+ SELECT
20
+ ' USE [master];
16
21
GO
17
22
CREATE SERVER AUDIT [' + replace (@@SERVERNAME ,' \' ,' ' )+ ' -Audit]
18
23
TO APPLICATION_LOG --write to the Application Event Log
19
24
WITH
20
25
( QUEUE_DELAY = 5000
21
26
,ON_FAILURE = CONTINUE
22
- )
27
+ );
23
28
go
24
- CREATE SERVER AUDIT SPECIFICATION [ServerAudit ]
29
+ CREATE SERVER AUDIT SPECIFICATION [' + replace ( @@SERVERNAME , ' \' , ' ' ) + ' -Audit-Spec ]
25
30
FOR SERVER AUDIT [' + replace (@@SERVERNAME ,' \' ,' ' )+ ' -Audit]
26
31
ADD (DATABASE_OBJECT_CHANGE_GROUP),
27
32
ADD (DATABASE_ROLE_MEMBER_CHANGE_GROUP),
28
33
ADD (AUDIT_CHANGE_GROUP),
29
34
ADD (DATABASE_PERMISSION_CHANGE_GROUP),
30
35
ADD (SCHEMA_OBJECT_PERMISSION_CHANGE_GROUP),
31
- ADD (SCHEMA_OBJECT_CHANGE_GROUP), --Important: This event is raised whenever any schema of any database changes .
36
+ ADD (SCHEMA_OBJECT_CHANGE_GROUP), --Important: This event is raised for any DDL in any database.
32
37
ADD (SERVER_ROLE_MEMBER_CHANGE_GROUP),
33
38
ADD (LOGIN_CHANGE_PASSWORD_GROUP),
34
39
ADD (SERVER_PRINCIPAL_CHANGE_GROUP)
35
- WITH (STATE = OFF)
40
+ WITH (STATE = OFF);
36
41
GO'
37
42
38
- select
43
+ SELECT
39
44
-- TODO 1. specify events and logins/groups to be captured for Database Audit
40
45
-- As configured only captures writes. Add a similar pattern for ADD(SELECT ... to capture all reads.
41
46
42
- ' USE ['+ d .name + ' ]
43
- GO
44
- CREATE DATABASE AUDIT SPECIFICATION [Database-' + replace (d .name ,' ' ,' ' )+ ' -Audit]
45
- FOR SERVER AUDIT [' + replace (@@SERVERNAME ,' \' ,' ' )+ ' -Audit]
46
47
-- catch all known admin users, regardless of whether or not they have dbo right now
47
48
-- Examples:
48
- ADD (UPDATE ON DATABASE::[' + d .name + ' ] BY [Sparkhound\w illiam.assaf]),
49
- ADD (DELETE ON DATABASE::[' + d .name + ' ] BY [Sparkhound\w illiam.assaf]),
50
- ADD (INSERT ON DATABASE::[' + d .name + ' ] BY [Sparkhound\w illiam.assaf]),
51
- ADD (EXECUTE ON DATABASE::[' + d .name + ' ] BY [Sparkhound\w illiam.assaf]),
52
- ADD (UPDATE ON DATABASE::[' + d .name + ' ] BY [Sparkhound\D evelopers]),
53
- ADD (DELETE ON DATABASE::[' + d .name + ' ] BY [Sparkhound\D evelopers]),
54
- ADD (INSERT ON DATABASE::[' + d .name + ' ] BY [Sparkhound\D evelopers]),
55
- ADD (EXECUTE ON DATABASE::[' + d .name + ' ] BY [Sparkhound\D evelopers]),
49
+ -- ADD (UPDATE ON DATABASE::['+d.name+'] BY [Sparkhound\william.assaf]),
50
+ -- ADD (DELETE ON DATABASE::['+d.name+'] BY [Sparkhound\william.assaf]),
51
+ -- ADD (INSERT ON DATABASE::['+d.name+'] BY [Sparkhound\william.assaf]),
52
+ -- ADD (EXECUTE ON DATABASE::['+d.name+'] BY [Sparkhound\william.assaf]),
53
+ -- ADD (UPDATE ON DATABASE::['+d.name+'] BY [Sparkhound\Developers]),
54
+ -- ADD (DELETE ON DATABASE::['+d.name+'] BY [Sparkhound\Developers]),
55
+ -- ADD (INSERT ON DATABASE::['+d.name+'] BY [Sparkhound\Developers]),
56
+ -- ADD (EXECUTE ON DATABASE::['+d.name+'] BY [Sparkhound\Developers]),
56
57
57
58
-- catch all database admins, period.
58
- ADD (UPDATE ON DATABASE::[' + d .name + ' ] BY [dbo]),
59
- ADD (INSERT ON DATABASE::[' + d .name + ' ] BY [dbo]),
60
- ADD (DELETE ON DATABASE::[' + d .name + ' ] BY [dbo]),
61
- ADD (EXECUTE ON DATABASE::[' + d .name + ' ] BY [dbo])
59
+ -- ADD (UPDATE ON DATABASE::['+d.name+'] BY [dbo]),
60
+ -- ADD (INSERT ON DATABASE::['+d.name+'] BY [dbo]),
61
+ -- ADD (DELETE ON DATABASE::['+d.name+'] BY [dbo]),
62
+ -- ADD (EXECUTE ON DATABASE::['+d.name+'] BY [dbo]),
63
+ -- ADD (SELECT ON DATABASE::['+d.name+'] BY [dbo])
64
+ -- WITH (STATE = OFF);
65
+
66
+ N ' USE ['+ d .name + ' ];
67
+ GO
68
+ CREATE DATABASE AUDIT SPECIFICATION [Database-' + replace (d .name ,N ' ' ,N ' ' )+ N' -Audit-Spec]
69
+ FOR SERVER AUDIT [' + replace (@@SERVERNAME ,' \' ,' ' )+ N' -Audit]
70
+ --catch all activity, period.
71
+ ADD (UPDATE ON DATABASE::[' + d .name + N' ] BY [public]),
72
+ ADD (INSERT ON DATABASE::[' + d .name + N' ] BY [public]),
73
+ ADD (DELETE ON DATABASE::[' + d .name + N' ] BY [public]),
74
+ ADD (EXECUTE ON DATABASE::[' + d .name + N' ] BY [public]),
75
+ ADD (SELECT ON DATABASE::[' + d .name + N' ] BY [public])
62
76
WITH (STATE = OFF);
63
77
GO
64
- ALTER DATABASE AUDIT SPECIFICATION [Database-' + replace (d .name ,' ' ,' ' )+ ' -Audit]
65
- FOR SERVER AUDIT [' + @@SERVERNAME + ' -Audit]
78
+ ALTER DATABASE AUDIT SPECIFICATION [Database-' + replace (d .name ,N ' ' ,N ' ' )+ N ' -Audit-Spec ]
79
+ FOR SERVER AUDIT [' + replace ( @@SERVERNAME , ' \' , ' ' ) + N ' -Audit]
66
80
WITH (STATE = ON);
67
81
GO
68
82
'
69
- from sys .databases d
83
+ FROM (SELECT name = convert (nvarchar (4000 ), d .name ) from sys .databases d
84
+ WHERE d .name not in (' tempdb' ,' msdb' ,' distribution' )
85
+ -- and d.name in (N'a2012db') --this filter for testing only
86
+ ) d;
70
87
-- TODO 2. Add any database names here you want to ignore
71
- where d . name not in ( ' tempdb' , ' msdb' , ' distribution' )
88
+
72
89
GO
73
90
SELECT '
74
- USE master
91
+ use master
92
+ go
93
+ ALTER SERVER AUDIT SPECIFICATION [' + replace (@@SERVERNAME ,' \' ,' ' )+ ' -Audit-Spec]
94
+ WITH (STATE = ON);
75
95
GO
76
- --ALTER SERVER AUDIT [' + replace (@@SERVERNAME ,' \' ,' ' )+ ' -Audit]
77
- --WITH (STATE = OFF);
78
- --GO
79
96
ALTER SERVER AUDIT [' + replace (@@SERVERNAME ,' \' ,' ' )+ ' -Audit]
80
97
WITH (STATE = ON);
81
98
GO
82
99
' ;
100
+
101
+ /*
102
+
103
+ --Cleanup
104
+
105
+ USE [master]
106
+ GO
107
+ ALTER SERVER AUDIT [BTR-69NRN32SQL2K16-Audit] WITH (STATE = OFF);
108
+ GO
109
+ ALTER SERVER AUDIT SPECIFICATION [BTR-69NRN32SQL2K16-Audit-Spec] WITH (STATE = OFF);
110
+ GO
111
+ USE [a2012db]
112
+ GO
113
+ ALTER DATABASE AUDIT SPECIFICATION [Database-a2012db-Audit-Spec] WITH (STATE = OFF);
114
+ GO
115
+ DROP DATABASE AUDIT SPECIFICATION [Database-a2012db-Audit-Spec]
116
+ GO
117
+ USE [master]
118
+ GO
119
+ DROP SERVER AUDIT SPECIFICATION [BTR-69NRN32SQL2K16-Audit-Spec]
120
+ GO
121
+ DROP SERVER AUDIT [BTR-69NRN32SQL2K16-Audit]
122
+ GO
123
+
124
+ */
0 commit comments