Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Кто вызвал процедуру? / 25 сообщений из 39, страница 1 из 2
23.09.2002, 20:05:20
    #32052508
Underking
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто вызвал процедуру?
Есть несколько хранимых процедур, причем они могут быть вызваны либо пользователем, либо другой хранимой процедурой. Как узнать, кто вызвал процедуру, пользователь или другая процедура?
При условии чтоб пользователь вызывая хранимую процедуру, например, из квери аналайзера, не смог бы имитировать вызов из хранимой процедуры.
...
Рейтинг: 0 / 0
23.09.2002, 22:07:08
    #32052515
Lexis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто вызвал процедуру?
sp_who
sp_who2
select * from sysprocesses
dbcc inputbuffer(id_process)

попробуй с этим набором команд
...
Рейтинг: 0 / 0
24.09.2002, 10:01:08
    #32052546
Underking
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто вызвал процедуру?
Как можно получить текущий id_process ?
Как прочесть значение текущего поля из команда dbcc inputbuffer(id_process) ?
...
Рейтинг: 0 / 0
24.09.2002, 10:09:46
    #32052551
Underking
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто вызвал процедуру?
Как вообще можно просто узнать, какая хранимая процедура запущена?
...
Рейтинг: 0 / 0
24.09.2002, 10:12:13
    #32052552
Tulkin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто вызвал процедуру?
create table #dbcc(EventType nvarchar(30),Parameters int,EventInfo nvarchar(255))
create table #last_stmt(spid int,EventInfo nvarchar(255))

declare @spid int,@dbcc varchar(100)
select * into #sp from master..sysprocesses with (nolock)
declare processes cursor fast_forward for
select spid from #sp
where status<>'background' and dbid<>0

open processes
while (1=1)
{
fetch processes into @spid
if @@fetch_status<>0 break

insert into #dbcc
exec ('dbcc inputbuffer ('+@spid+')')

insert into #last_stmt select @spid,EventInfo from #dbcc

delete from #dbcc
}

close processes
deallocate processes
drop table #dbcc
...
Рейтинг: 0 / 0
24.09.2002, 10:17:55
    #32052553
Александр Спелицин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто вызвал процедуру?
См. @@NESTLEVEL
= 1, если процедура вызвана юзером,
> 1, если вызвана из другой процедуры.

А вообще-то лучше роцедуры разделить на две группы: интерфейсные и внутрисистемные. У пользователей могут быть права на выполнение только интерфейсных процедур. В них происхдят всякие проверки, а также вызовы внутрисистемных процедур, на которые у пользоателей нет никаких прав.
...
Рейтинг: 0 / 0
24.09.2002, 10:18:55
    #32052555
Tulkin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто вызвал процедуру?
Сорри {...} читать как begin...end
...
Рейтинг: 0 / 0
24.09.2002, 10:40:38
    #32052566
Underking
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто вызвал процедуру?
>А вообще-то лучше роцедуры разделить на две группы: интерфейсные и внутрисистемные.

@@NESTLEVEL
Честно говоря дырь всеж остается, ибо пользователь может в другой базе (где у него есть права) создать процедуру и вызвать из нее эту, получив тем самым число более 1.
...
Рейтинг: 0 / 0
24.09.2002, 10:44:07
    #32052567
Underking
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто вызвал процедуру?
>А вообще-то лучше роцедуры разделить на две группы: интерфейсные и внутрисистемные.
Это конечно правильно, так и планировали сделать, но не удалось все так сделать.

>Tulkin
А полегче конструкции нет?
...
Рейтинг: 0 / 0
24.09.2002, 10:50:13
    #32052572
Tulkin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто вызвал процедуру?
Приведенный кусок кода делает временную табличку, в которую валятся все текущие активные процессы и последние комманды, запущенные этими процессами. Осталось только выкусить нужный кусок и юзать.
...
Рейтинг: 0 / 0
24.09.2002, 11:01:25
    #32052582
Underking
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто вызвал процедуру?
>Tulkin
Стоп, а как отсюда получить имя запущенной процедуры. Здесь есть имя приложения, но это не интересно.
...
Рейтинг: 0 / 0
24.09.2002, 11:02:20
    #32052583
Зайцев Фёдор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто вызвал процедуру?
Ку?
Код: plaintext
object_name(@@procid)
...
Рейтинг: 0 / 0
24.09.2002, 11:13:09
    #32052589
Tulkin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто вызвал процедуру?
select @spid,EventInfo from #last_stmt
...
Рейтинг: 0 / 0
24.09.2002, 15:03:37
    #32052705
Underking
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто вызвал процедуру?
object_name(@@procid)
Это название той процедуры которая выполняется, а не той что была запущена пользователем.
...
Рейтинг: 0 / 0
24.09.2002, 16:12:23
    #32052732
VAT
VAT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто вызвал процедуру?
Есть несколько хранимых процедур, причем они могут быть вызваны либо пользователем, либо другой хранимой процедурой. Как узнать, кто вызвал процедуру, пользователь или другая процедура?

Можно узнать, для чего?
...
Рейтинг: 0 / 0
24.09.2002, 16:28:51
    #32052736
Underking
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто вызвал процедуру?
>VAT
Чтоб процедура сама проверяла, есть ли у пользователя право ее запускать и какие вействия с ней он может выполнять.
...
Рейтинг: 0 / 0
24.09.2002, 16:32:41
    #32052738
VAT
VAT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто вызвал процедуру?
Не давайте на неё права, и прав не будет.
А если права есть, посмотрите внутри процедуры user_id()
или user_name(), и там решите, что с ним делать
...
Рейтинг: 0 / 0
24.09.2002, 16:34:07
    #32052739
Makc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто вызвал процедуру?
Для этого есть system_user и session_user
...
Рейтинг: 0 / 0
24.09.2002, 16:42:25
    #32052745
Underking
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто вызвал процедуру?
Там более хитрая ситуация, например процедура удаления должна отдельно проверять право на удаление своих записей и чужих, это два разных права.
Кроме того если процедура вызывается напрямую - это одни права, из другой процедуры - другие.
Вообщем нужно знать, какую именно процедуру запустил пользователь.
...
Рейтинг: 0 / 0
24.09.2002, 16:42:54
    #32052746
Зайцев Фёдор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто вызвал процедуру?
2Underking
object_name(@@procid)
Это название той процедуры которая выполняется, а не той что была запущена пользователем

Я это знаю. И Вы это знаете.
Но кто тогда писал это ?

Как вообще можно просто узнать, какая хранимая процедура запущена?
...
Рейтинг: 0 / 0
24.09.2002, 16:46:01
    #32052748
Зайцев Фёдор
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто вызвал процедуру?
Прошу прощения, я не хотел, конечно, сказать, что
object_name(@@procid) не вернёт "название той процедуры,"... " что была запущена пользователем"
...
Рейтинг: 0 / 0
24.09.2002, 17:07:50
    #32052752
VAT
VAT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто вызвал процедуру?
1.Если известен user_id(), то можно узнать, его это записи или нет.
2.У процедуры всегда права владельца, независимо от того, кто её запустил. Если Вы хотите построить какую-то логику в зависимости через что :-) её запустили, то это неверно.
...
Рейтинг: 0 / 0
24.09.2002, 17:49:39
    #32052774
Underking
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто вызвал процедуру?
Мне перед запуском хранимой процедуры нужно проверить, имеет ли право пользователь запускать ее. Если процедура1 запускает процедуру2, то в процедуре2 нужно проверять на право запуска процедуры1. Если просто запустить процедуру2, тогда надо уже проверять другие права.
...
Рейтинг: 0 / 0
24.09.2002, 18:01:35
    #32052782
MiCe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто вызвал процедуру?
по моему г-н Makc Вам уже ответил...
...
Рейтинг: 0 / 0
24.09.2002, 18:05:17
    #32052786
Underking
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто вызвал процедуру?
>MiCe
Не совсем, как узнать чей сейчас сеанс работы - это одно. Мне надо знать, какая хранимая процедура запущена пользователем.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Кто вызвал процедуру? / 25 сообщений из 39, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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