powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Поиск процедуры
36 сообщений из 36, показаны все 2 страниц
Поиск процедуры
    #39818977
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Товарищи, добрый вечер.
Подскажите, пожалуйста, есть ли такой запрос, который бы искал: из какой процедуры запускается нужная мне процедура?
То есть у меня есть процедура, я знаю ее название, а какой процедурой она запускается я, к примеру не знаю, однако хотелось бы узнать.
благодарю.
...
Рейтинг: 0 / 0
Поиск процедуры
    #39818979
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
use MyDB;
select * from sys.dm_sql_referencing_entities('MyProcedure', 'object');
...
Рейтинг: 0 / 0
Поиск процедуры
    #39818984
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm
Код: sql
1.
2.
use MyDB;
select * from sys.dm_sql_referencing_entities('MyProcedure', 'object');



спасибо, правильно ли я понимаю: My procedure - процедура которую я ищу, а object?
...
Рейтинг: 0 / 0
Поиск процедуры
    #39818989
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dermamainvm
Код: sql
1.
2.
use MyDB;
select * from sys.dm_sql_referencing_entities('MyProcedure', 'object');



спасибо, правильно ли я понимаю: My procedure - процедура которую я ищу, а object?

первый источник информации - help
https://docs.microsoft.com/en-us/sql/relational-databases/system-dynamic-management-views/sys-dm-sql-referencing-entities-transact-sql
...
Рейтинг: 0 / 0
Поиск процедуры
    #39819026
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если по-быстрому и на один раз, то в SSMS "View dependencies".
...
Рейтинг: 0 / 0
Поиск процедуры
    #39819107
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
SELECT * FROM sys.sql_expression_dependencies
WHERE referencing_id = OBJECT_ID(@SqlObjName)

Ключевые поля referencing_id и referenced_id

Можно получить все зависимости в обе стороны.
...
Рейтинг: 0 / 0
Поиск процедуры
    #39819229
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argo
Код: sql
1.
2.
SELECT * FROM sys.sql_expression_dependencies
WHERE referencing_id = OBJECT_ID(@SqlObjName)


Ключевые поля referencing_id и referenced_id

Можно получить все зависимости в обе стороны.

referenced_id не будет заполнено, если используемый объект отсутствовал на момент создания/последнего sp_refresh... referencing объекта

поэтому надежнее использовать referenced_schema_name + referenced_entity_name
...
Рейтинг: 0 / 0
Поиск процедуры
    #39821993
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
L_argo
Код: sql
1.
2.
SELECT * FROM sys.sql_expression_dependencies
WHERE referencing_id = OBJECT_ID(@SqlObjName)

Ключевые поля referencing_id и referenced_id

Можно получить все зависимости в обе стороны.

спасибо, дорогой, мне ваш запрос походу функцию запустил. еще и письмецо на почту со сверкой отправил, потрясающе, а я то думаю что он так долго (10 мин) работает, видимо подробную информацию выдаст........
...
Рейтинг: 0 / 0
Поиск процедуры
    #39822062
Penner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Поиск процедуры
    #39822383
TheRookie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dermama, для случая, когда процедуры располагаются в разных базах

Код: sql
1.
2.
3.
4.
5.
6.
Use another_db
GO
SELECT [name]
FROM sys.objects
WHERE [type] IN ('P') 
AND OBJECT_DEFINITION([object_id]) LIKE '%my_proc%';
...
Рейтинг: 0 / 0
Поиск процедуры
    #39822386
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TheRookiedermama, для случая, когда процедуры располагаются в разных базах

Код: sql
1.
2.
3.
4.
5.
6.
Use another_db
GO
SELECT [name]
FROM sys.objects
WHERE [type] IN ('P') 
AND OBJECT_DEFINITION([object_id]) LIKE '%my_proc%';




для случая, когда процедуры располагаются в разных базах/серверах, в sys.sql_expression_dependencies есть referenced_server_name и referenced_database_name
...
Рейтинг: 0 / 0
Поиск процедуры
    #39822390
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
эти конструкции динамику не ловят,
если она используется, то лучше по тексту кода искать
...
Рейтинг: 0 / 0
Поиск процедуры
    #39822549
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Критикэти конструкции динамику не ловят,
если она используется, то лучше по тексту кода искать

То есть вот этот запрос мне ничего не запустит?? Хорошо, что процедура просто подгружала информацию ни на что не влияющую, а если бы там UPDATE был бы?

Use another_db
GO
SELECT [name]
FROM sys.objects
WHERE [type] IN ('P')
AND OBJECT_DEFINITION([object_id]) LIKE '%my_proc%';
...
Рейтинг: 0 / 0
Поиск процедуры
    #39822550
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Критикэти конструкции динамику не ловят,
если она используется, то лучше по тексту кода искать

Расскажите, пожалуйста, как SELECT мог мне запустить исполнение процедуры? Я пробовал искать зависимости по другим процедурам и подобного не было - была лишь выборка в виде таблицы, а тут, пока я покурить сходил - отчет о том, процедура отработала успешно, да еще отчетик на всю группу выслала.
...
Рейтинг: 0 / 0
Поиск процедуры
    #39822618
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dermamaКритикэти конструкции динамику не ловят,
если она используется, то лучше по тексту кода искать

Расскажите, пожалуйста, как SELECT мог мне запустить исполнение процедуры? Я пробовал искать зависимости по другим процедурам и подобного не было - была лишь выборка в виде таблицы, а тут, пока я покурить сходил - отчет о том, процедура отработала успешно, да еще отчетик на всю группу выслала.
никак, это ваша фантазия
...
Рейтинг: 0 / 0
Поиск процедуры
    #39822626
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaKdermamaпропущено...


Расскажите, пожалуйста, как SELECT мог мне запустить исполнение процедуры? Я пробовал искать зависимости по другим процедурам и подобного не было - была лишь выборка в виде таблицы, а тут, пока я покурить сходил - отчет о том, процедура отработала успешно, да еще отчетик на всю группу выслала.
никак, это ваша фантазия

скриншот не могу показывать, однако, стало бы ясно, что фантазии мои настолько же не верны, как верно ваше утверждение.
...
Рейтинг: 0 / 0
Поиск процедуры
    #39822630
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dermamaTaPaKпропущено...

никак, это ваша фантазия

скриншот не могу показывать, однако, стало бы ясно, что фантазии мои настолько же не верны, как верно ваше утверждение.
ладно, это ваша больная фантазия, не внимательность и тд и тп

my_proc
go
SELECT

тоже построит ва отчётик
...
Рейтинг: 0 / 0
Поиск процедуры
    #39822662
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dermamaскриншот не могу показывать, однако, стало бы ясно, что фантазии мои настолько же не верны, как верно ваше утверждение.Скриншот вряд ли может показать, что ничего, кроме вышеупомянутого запроса, на сервере не запускалось.

Конечно, внутренности sys.sql_expression_dependencies скрыты, но что бы он что то запускал, очень маловероятно.
В плане там обычные Clustered Index Scan/Seek из таблиц, никаких вызовов кода нет, кроме типичных проверок прав, определения имени текущей базы и тому подобного.
...
Рейтинг: 0 / 0
Поиск процедуры
    #39822669
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,

Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE VIEW sys.sql_expression_dependencies AS
	SELECT referencing_id, referencing_minor_id, referencing_class, referencing_class_desc,
			is_schema_bound_reference, referenced_class, referenced_class_desc,
			referenced_server_name, referenced_database_name, referenced_schema_name, referenced_entity_name,
			referenced_id, referenced_minor_id, is_caller_dependent, is_ambiguous
	FROM sys.sql_expression_dependencies$
	WHERE has_perms_by_name(quotename(db_name()), 'DATABASE', 'VIEW DEFINITION') = 1



что там в системном объекте уже хз, но вызов это фантастика
...
Рейтинг: 0 / 0
Поиск процедуры
    #39822672
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKчто там в системном объекте уже хзДа, я и говорю, скрыто. Но план показывает все обращения (блин, и зачем скрывали?)
Не, можно, конечно, посмотреть в присоединённых ресурсах (опять же, и зачем скрывали?), но неохота.
...
Рейтинг: 0 / 0
Поиск процедуры
    #39822768
dermama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaKalexeyvg,

Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE VIEW sys.sql_expression_dependencies AS
	SELECT referencing_id, referencing_minor_id, referencing_class, referencing_class_desc,
			is_schema_bound_reference, referenced_class, referenced_class_desc,
			referenced_server_name, referenced_database_name, referenced_schema_name, referenced_entity_name,
			referenced_id, referenced_minor_id, is_caller_dependent, is_ambiguous
	FROM sys.sql_expression_dependencies$
	WHERE has_perms_by_name(quotename(db_name()), 'DATABASE', 'VIEW DEFINITION') = 1



что там в системном объекте уже хз, но вызов это фантастика

Я новичек в SQL, но отличить выборку и запуск процедуры я в состоянии. Я запустил запрос

DECLARE @SqlObjName varchar (100)
SET @SqlObjName = '[схема].[имя_моей_процедуры]'

SELECT *
FROM sys.sql_expression_dependencies
WHERE referencing_id = OBJECT_ID(@SqlObjName)


запрос начала выполняться, прошло секунд 30, думаю, ну ладно, пойду покурю, может много зависимостей - процедура большая.
Пришел с перекура, через 10 минут: Как результат в диалоговом окне, где обычно появляется выборка запроса - Messages
(1 row affected)
2019-06-03 22:20:40.100: название_моей процедуры: Running: Старт процедуры база.схема.название процедуры
2019-06-03 22:20:40.223: --тут запустил входящую процедуру в состав предыдущей
всего 10 пунктов.
.
.
.
.
.
.
.
.
2019-06-03 22:31:11.763: название_моей процедуры: END: Успешное завершение процедуры название_моей _процедуры.
(смотрю скриншот)

Товарищи, я ни в коем случае не сомневаюсь в вашей компетенции, однако есть вероятность того, что вы о таком могли просто не знать?
...
Рейтинг: 0 / 0
Поиск процедуры
    #39822773
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dermama,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
--1.
CREATE OR ALTER PROCEDURE dbo.Bullshit
As
	SELECT 'I AM bullshit'
GO


DECLARE @SqlObjName varchar (100)
SET @SqlObjName = '[dbo].[Bullshit]'

SELECT *
FROM sys.sql_expression_dependencies
WHERE referencing_id = OBJECT_ID(@SqlObjName)

GO
--2
dbo.Bullshit



первую половину я могу запускать целый день и наверное серевр таки решит что я хочу что то выполнить.
А у вас где то написано ака 2 пункт
...
Рейтинг: 0 / 0
Поиск процедуры
    #39822818
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всё это не учитывает злобных злонамеренных извращенцев.
А таковые, к сожалению, встречаются.

Например, перечень запускаемых хранимых процедур может хранится в таблице, читаться оттуда и запускаться через exec или sp_executesql.

Или, например, как вам такое:
Код: sql
1.
2.
3.
4.
Declare @sql as varchar(max)

Select @sql = Cast (0x50726F635F3031 as varchar(max))
Exec (@sql)


Почти, млять, реальный кусок из реальной программы, но в реальности всё еще жопнее!
Там формируется кусок текста для динамического sql, причем в нем могут запускаться хранимки вида proc_tools, proc_prepare, proc_exec, причем эти 'prepare' и т.д. формируются через replace, по статически заданному куску, а 'proc', значит, замаскированы, см. выше, чтобы этим самым реплейсом случайно не ловились.

И вот скажите мне, друзья, какими словами можно выразить благодарность разработчику?

... И это еще не учтен вариант формирование самих sp динамически...

Можно, я не буду продолжать?
...
Рейтинг: 0 / 0
Поиск процедуры
    #39822843
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И вот скажите мне, друзья, какими словами можно выразить благодарность разработчику?Он реально преуспел в обфускации.
Видимо жадный заказчик его напарил, но он в долгу не остался.
Теперь заказчик вдвойне платит другому разработчику и доводит его до белого каления.
...
Рейтинг: 0 / 0
Поиск процедуры
    #39822848
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggsterИли, например, как вам такое:Скобки у EXEC - лишние.
...
Рейтинг: 0 / 0
Поиск процедуры
    #39822856
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapuaggsterИли, например, как вам такое:Скобки у EXEC - лишние.
чего? там же EXEC (string)
...
Рейтинг: 0 / 0
Поиск процедуры
    #39822861
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKiapпропущено...
Скобки у EXEC - лишние.
чего? там же EXEC (string)EXEC @SQL, где @SQL состоит из имени процедуры.
Кстати, в этом случае никакого динамического SQL.
...
Рейтинг: 0 / 0
Поиск процедуры
    #39822863
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapTaPaKпропущено...

чего? там же EXEC (string)EXEC @SQL, где @SQL состоит из имени процедуры.
Кстати, в этом случае никакого динамического SQL.

Будет работать хоть EXEC (@str) хоть EXEC @str
...
Рейтинг: 0 / 0
Поиск процедуры
    #39822878
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKiapпропущено...
EXEC @SQL, где @SQL состоит из имени процедуры.
Кстати, в этом случае никакого динамического SQL.

Будет работать хоть EXEC (@str) хоть EXEC @strА если нет разницы, то зачем...?? ©
...
Рейтинг: 0 / 0
Поиск процедуры
    #39822903
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
L_argoИ вот скажите мне, друзья, какими словами можно выразить благодарность разработчику?Он реально преуспел в обфускации.
Видимо жадный заказчик его напарил, но он в долгу не остался.
Теперь заказчик вдвойне платит другому разработчику и доводит его до белого каления.
Самое забавное - это не то, чтобы обфускация.
"Они так видят"(С)
... лучше б впрямую обфусцировали.
...
Рейтинг: 0 / 0
Поиск процедуры
    #39823024
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggster,

типа попытка работать в привычной парадигме ООП любой ценой?
...
Рейтинг: 0 / 0
Поиск процедуры
    #39823109
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов,
Видимо, в частности - да.

Помните историю с баша, о разборе текстовых данных на java?
Ну, дескать, что относиться к этому нужно как к уборке квартиры после пьяной студенческой вечеринки:
- Что? На антресолях насрали? Ну что за люди!

Еще хранимая процедура может вызываться другой хранимой процедурой через севис брокер, путем, собственно, отправки сообщения брокеру. И тут, как вы понимаете, имя вызываемой процедуры вообще фигурировать не будет.
А еще - путем запуска задания агента.
Или вызываться в коде хранимки на CLR.
Или в триггере на таблицу, изменения в которой производятся в хранимке.
Или, например, в триггере уровня базы данных, или уровня сервера.

Но самое мое любимое - это, безусловно, временные хранимые процедуры.
Ну, т.е. в хранимке фигурирует вызов некой временной хранимой процедуры, но вот сама временная хранимая процедура, куда может быть понапихано что угодно, создается логон триггером, например. Ну или вообще - с клиента.

А использование sql-инъекции в "мирных целях" вы видели?
Я, например, видел.
Млять.
...
Рейтинг: 0 / 0
Поиск процедуры
    #39823311
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не могу, остановиться, простите, распирает меня!
Как вам такой шедевр зависимостей.
Кусок, правда, модельный, но для понимания идеи - достаточно.
Сначала, они сделали так, цитирую фактически с сохранением оригинального синтаксиса:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
Use testdb
go
-- Да да, именно такая вью поверх статического списка!
Create view [events] as
Select * from 
	(values 
	 (1, Cast('event1' as nvarchar(255)), Cast(''as nvarchar(255)))
	,(2, 'event2', '')
	,(3, 'event3', '')
	) v (id, [event], [message])
Go

-- И замечательный триггер на ней. Причем этот текст - только для иллюстрации идеи.
CREATE TRIGGER [event_log]
ON [events]
INSTEAD OF update
AS
Begin
	Declare @x xml
	Set @x = ( 
			Select * from inserted
			for xml raw, type
			 )
	exec Proc_01 @x = @x
-- и много еще всякой фигни
End



А потом элегантно разбросали везде, где смогли, щедрой рукой, т.с., по всем процедуркам:
Код: sql
1.
2.
3.
Update [dbo].[events]
	Set [message] = 'test'
Where id in (1, 2)


Причем апдейты иногда очень даже зубодробительные!

И всё в таком духе.
(это я сильно упрощенно, для иллюстрации)

Вот вы мне скажите:
1. Кем надо быть, чтобы такое творить?
2. Кто этих uebkoff научил так делать?
3. И какой, какой в этом смысл, а? Ну, кроме того, чтобы потом сопровождающих задолбали в ноль.

Объясните, может я чего то не понимаю?
Это может в кукбоке каком есть или еще что?
Должно же быть рациональное зерно какое-то, кроме шизофрении, а?

Прошу прощения за экспрессию.
Но вопросы не риторические, мне интересно!
:-)
...
Рейтинг: 0 / 0
Поиск процедуры
    #39823330
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggster,

тут вопрос что делает этот Proc_01. Могу придумать что для отладки что-то нарисовали
...
Рейтинг: 0 / 0
Поиск процедуры
    #39823365
uaggster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TaPaK, нет, это я так, для примера нарисовал.
Триггер - реальная большая хранимка, с разветвленной логикой, которая учитывает контекст сессии и т.д.
И причем, если б это одна точка такая была - это как то понятно было бы.
Нет же! Там с десяток таких вьюх, c INSTEAD OF триггерами, частью - поверх статических списков, частью - поверх таблиц, причем вьюхи - потому что содержимое этих таблиц фильтруется по имени пользователя или по принадлежности к роли (не 2017, row security нету).
Нет! Это используется как самостоятельный прием программирования!
Они, значит, делают апдейт каких то там столбцов в этих вьюхах, в хранимках, я имею ввиду, делают, а, зачастую - прямо с клиента, прямым запросом, а внутри триггера, значит, анализируют то, что прилетело в inserted, и что-то там дальше делают.

Я так понимаю, господа просто не умеют табличных типов. Ну, или не хотят уметь.

Но мне интересно, откуда такая зараза могла приползти? Прием, в смысле. В оракуле так делают? Или в постгрессе? Кто надоумил то?

Причем, вот беда, я кроме как "плохо поддерживаемо" никаких аргументов привести не могу. Не хватает знаний. Я не разработчик, я сисадмин.
...
Рейтинг: 0 / 0
Поиск процедуры
    #39823440
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uaggster,

напоминает творчество индусов.
...
Рейтинг: 0 / 0
36 сообщений из 36, показаны все 2 страниц
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Поиск процедуры
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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