Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Аудит хранимых процедур / 3 сообщений из 3, страница 1 из 1
06.11.2002, 22:28:55
    #32065623
Nastasia
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аудит хранимых процедур
http://www.osp.ru/win2000/2000/06/059.htm

"...Механизм расширенных свойств можно использовать для аудита вызова хранимых процедур, т. е. для получения сведений о том, кто вызвал хранимую процедуру, когда и с какими параметрами.
Для этого нужно создать расширенные свойства для процедуры или пользователя, например, в Query Analyzer, а текст процедуры дополнить вызовом обновления соответствующих расширенных свойств. .."

neponiatno tol"ko kak etim pol'zovatcia ...

ochen" nado audit cdelat" ....
...
Рейтинг: 0 / 0
07.11.2002, 21:11:58
    #32065777
Lexis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аудит хранимых процедур
там же пример есть...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE PROC Showind @table varchar( 30 ) = ‘sys%’
AS SELECT TABLE_NAME = sysobjects.name,
 INDEX_NAME = sysindexes.name, INDEX_ID = indid
FROM sysindexes INNER JOIN sysobjects
ON sysobjects.id = sysindexes.id
WHERE sysobjects.name LIKE @table
declare @calldate datetime
select @calldate = getdate()
EXEC sp_updateextendedproperty ‘call’ ,@calldate ,
 ‘user’, dbo, ‘procedure’, ‘showind’
GO
...
Рейтинг: 0 / 0
07.11.2002, 22:26:56
    #32065779
Дед Маздай
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Аудит хранимых процедур
Я не думаю, что использование расширенных свойств объектов является блестящим решением для аудита. Допустим, Вы хотите отслеживать, кто и когда вызывал данную процедуру. При помощи расширенных св-в это будет выглядеть примерно так:

use tempdb

if exists(select 1 from information_schema.routines where routine_name = 'spTest' and routine_type = 'procedure') drop proc spTest
go
create proc spTest as
declare @msg as sql_variant, @user as sysname
set @msg = 'Я - процедура ' + object_name(@@procid) + '. Последний раз вызывалась юзером ' + user_name() + ' в ' + convert(char(24), getdate(), 121)
exec sp_updateextendedproperty 'LastCall', @msg, 'user', dbo, 'procedure', 'spTest'
go

exec sp_addextendedproperty 'LastCall', null, 'user', dbo, 'procedure', spTest

exec spTest

Теперь, если мы посмотрим значение св-ва LastCall при помощи ::fn_listextendedproperty() или напрямую:
select value from sysproperties where name = 'LastCall' and id = object_id('spTest')

то получим
-----------------------------------------------------------------------------------
Я - процедура spTest. Последний раз вызывалась юзером dbo в 2002-11-07 11:28:46.293

(1 row(s) affected)

Но не спешите радоваться. В BOL сказано "Members of the db_owner and db_ddladmin fixed database roles may update the extended properties of any object. Users may update extended properties to objects they own. However, only db_owner may update properties to user names."

Поэтому как только мы заводим обычного юзера aaa, разумеется, не являющегося владельцем процедуры и не входящего в указанные роли (а таких большинство), то данный способ работать не будет:

grant exec on spTest to aaa
setuser 'aaa'
exec spTest
setuser

Server: Msg 15247, Level 16, State 1, Procedure sp_validatepropertyinputs, Line 162
User does not have permission to perform this action.
Ну т.е. не может aaa вызвать sp_updateextendedproperty.

Поэтому мой Вам совет. Забейте в данном случае на расширенные св-ва и используйте вместо них для аудита собственную таблицу. Идейно это будет тоже самое, что и с sysproperties, только меньше геморроя с правами.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Аудит хранимых процедур / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]