Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Можно ли узнать (и как), КОГДА выдавалить разрешения на объект?  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8863
Можно ли узнать (и как), КОГДА выдавалить разрешения на объект?

Есть sys.database_principals и sys.database_permissions.
Но когда выдавались permissions для principals?

В текущем журнале - только информация о том, кто и когда залогинился. Ну ещё есть, но только самая общая.
Модель восстановления - простая. Сервер - 2008R2.

Заранее спасибо!
--------------------------
No ROM Basic...
10 дек 15, 01:56    [18538285]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли узнать (и как), КОГДА выдавалить разрешения на объект?  [new]
o-o
Guest
Взять коллекцию бэкапов и восстанавливать по соседству.
Дату бэкапа выбирать половинным делением.
Узнаете дату/время с точностью частоты выполнения бэкапов
10 дек 15, 08:08    [18538434]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли узнать (и как), КОГДА выдавалить разрешения на объект?  [new]
icprog
Member

Откуда:
Сообщений: 166
SIMPLicity_,

Можно попробовать поискать событие в дефолтной трассировке, если событие не перезаписалось.
Например так:
SELECT  TE.name AS [EventName] ,
        v.subclass_name ,
        T.DatabaseName ,
        t.DatabaseID ,
        t.NTDomainName,
        t.ApplicationName ,
        t.LoginName ,
        t.SPID ,
        t.StartTime ,
        t.RoleName ,
        t.TargetUserName ,
        t.TargetLoginName ,
        t.SessionLoginName
FROM    sys.fn_trace_gettable(CONVERT(VARCHAR(150), ( SELECT TOP 1
                                                              f.[value]
                                                      FROM    sys.fn_trace_getinfo(NULL) f
                                                      WHERE   f.property = 2
                                                    )), DEFAULT) T
        JOIN sys.trace_events TE ON T.EventClass = TE.trace_event_id
        JOIN sys.trace_subclass_values v ON v.trace_event_id = TE.trace_event_id
                                            AND v.subclass_value = t.EventSubClass
 WHERE T.DatabaseName='test' and StartTime>'2015-12-10 11:10:00.427'
 and te.name = 'Audit Schema Object GDR Event'
10 дек 15, 11:18    [18539245]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли узнать (и как), КОГДА выдавалить разрешения на объект?  [new]
o-o
Guest
можно и не только в последнем файле дефолтного трэйса искать,
т.е. все то же самое, но
sys.fn_trace_gettable(CONVERT(VARCHAR(150), ( SELECT TOP 1
                                                              f.[value]
                                                      FROM    sys.fn_trace_getinfo(NULL) f
                                                      WHERE   f.property = 2
                                                    )), DEFAULT) T

заменить на
sys.traces st cross apply
(select left(st.[path], len(st.[path]) - nullif(charindex('\', reverse(st.[path])), 0) + 1) + 'log.trc') t(p) 
cross apply sys.fn_trace_gettable(t.p, default) tr
10 дек 15, 12:50    [18539938]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли узнать (и как), КОГДА выдавалить разрешения на объект?  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8863
SIMPLicity_
Можно ли узнать (и как), КОГДА выдавалить разрешения на объект?

Есть sys.database_principals и sys.database_permissions.
Но когда выдавались permissions для principals?

В текущем журнале - только информация о том, кто и когда залогинился. Ну ещё есть, но только самая общая.
Модель восстановления - простая.
Сервер - 2008R2.

Заранее спасибо!
--------------------------
No ROM Basic...


Ошибся: Сервер - 2008 (Microsoft SQL Server 2008 (SP2) - 10.0.4316.0 (X64) Jul 5 2011 16:02:15 )

PS Сервер НЕ мой.

==========


icprog, СПАСИБО за пример. Вот так
+
SELECT  TE.name AS [EventName] ,
        v.subclass_name ,
        T.DatabaseName ,
        t.DatabaseID ,
        t.NTDomainName,
        t.ApplicationName ,
        t.LoginName ,
        t.SPID ,
        t.StartTime ,
        t.RoleName ,
        t.TargetUserName ,
        t.TargetLoginName ,
        t.SessionLoginName
FROM    sys.fn_trace_gettable(CONVERT(VARCHAR(150), ( SELECT TOP 1
                                                              f.[value]
                                                      FROM    sys.fn_trace_getinfo(NULL) f
                                                      WHERE   f.property = 2
                                                    )), DEFAULT) T
        JOIN sys.trace_events TE ON T.EventClass = TE.trace_event_id
        JOIN sys.trace_subclass_values v ON v.trace_event_id = TE.trace_event_id
                                            AND v.subclass_value = t.EventSubClass
 WHERE T.DatabaseName='test' and StartTime>'2015-12-10 11:10:00.427'
 and te.name = 'Audit Schema Object GDR Event'

невзетело ,- ошибка, немного не в тему ;) , :
+
Сообщение 156, уровень 15, состояние 1, строка 14
Incorrect syntax near the keyword 'CONVERT'.
Сообщение 102, уровень 15, состояние 1, строка 18
Incorrect syntax near ')'.



Сработало после небольшой правки, вот так:

use master;
declare @filename nvarchar(4000) = CONVERT(NVARCHAR(4000), (SELECT TOP 1 f.[value]
                                                        FROM sys.fn_trace_getinfo(NULL) f
                                                        WHERE f.property = 2
                                                      )
                                                    );

SELECT  TE.name AS [EventName] ,
        v.subclass_name ,
        T.DatabaseName ,
        t.DatabaseID ,
        t.NTDomainName,
        t.ApplicationName ,
        t.LoginName ,
        t.SPID ,
        t.StartTime ,
        t.RoleName ,
        t.TargetUserName ,
        t.TargetLoginName ,
        t.SessionLoginName
FROM    sys.fn_trace_gettable(@filename, -1) T
        JOIN sys.trace_events TE ON T.EventClass = TE.trace_event_id
        JOIN sys.trace_subclass_values v ON v.trace_event_id = TE.trace_event_id
                                            AND v.subclass_value = t.EventSubClass
WHERE T.DatabaseName='tempdb' and StartTime>'2015-11-26 11:10:00.427'
 -- and te.name = 'Audit Schema Object GDR Event';
 
11 дек 15, 10:52    [18544860]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли узнать (и как), КОГДА выдавалить разрешения на объект?  [new]
o-o
Guest
а теперь сравните, сколько вернет первый вариант, и сколько второй.
вроде как если по *всем* файлам дефолтного трэйса пройтись,
вероятность отловить давнишнее событие повышается.
declare @filename nvarchar(4000) = CONVERT(NVARCHAR(4000), (SELECT TOP 1 f.[value]
                                                        FROM sys.fn_trace_getinfo(NULL) f
                                                        WHERE f.property = 2
                                                      )
                                                    );

SELECT  COUNT(*)
FROM    sys.fn_trace_gettable(@filename, -1) T
        JOIN sys.trace_events TE ON T.EventClass = TE.trace_event_id
        JOIN sys.trace_subclass_values v ON v.trace_event_id = TE.trace_event_id
                                            AND v.subclass_value = t.EventSubClass
                                            
--13598              

SELECT  COUNT(*)
FROM
sys.traces st cross apply
(select left(st.[path], len(st.[path]) - nullif(charindex('\', reverse(st.[path])), 0) + 1) + 'log.trc') t(p) 
cross apply sys.fn_trace_gettable(t.p, default) tr     
        JOIN sys.trace_events TE ON tr.EventClass = TE.trace_event_id
        JOIN sys.trace_subclass_values v ON v.trace_event_id = TE.trace_event_id
                                            AND v.subclass_value = tr.EventSubClass
--253499
11 дек 15, 11:06    [18544920]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли узнать (и как), КОГДА выдавалить разрешения на объект?  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8863
o-o
можно и не только в последнем файле дефолтного трэйса искать,
т.е. все то же самое, но
+
sys.fn_trace_gettable(CONVERT(VARCHAR(150), ( SELECT TOP 1
                                                              f.[value]
                                                      FROM    sys.fn_trace_getinfo(NULL) f
                                                      WHERE   f.property = 2
                                                    )), DEFAULT) T

заменить на
sys.traces st cross apply
(select left(st.[path], len(st.[path]) - nullif(charindex('\', reverse(st.[path])), 0) + 1) + 'log.trc') t(p) 
cross apply sys.fn_trace_gettable(t.p, default) tr


Срасибо!, но чо-та "невзетело"... :(
11 дек 15, 11:17    [18544990]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить