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



спасибо, правильно ли я понимаю: My procedure - процедура которую я ищу, а object?
...
Рейтинг: 0 / 0
27.05.2019, 22:06
    #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
28.05.2019, 00:21
    #39819026
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск процедуры
Если по-быстрому и на один раз, то в SSMS "View dependencies".
...
Рейтинг: 0 / 0
28.05.2019, 09:50
    #39819107
L_argo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск процедуры
Код: sql
1.
2.
SELECT * FROM sys.sql_expression_dependencies
WHERE referencing_id = OBJECT_ID(@SqlObjName)

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

Можно получить все зависимости в обе стороны.
...
Рейтинг: 0 / 0
28.05.2019, 12:33
    #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
03.06.2019, 22:56
    #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
04.06.2019, 08:18
    #39822062
Penner
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск процедуры
...
Рейтинг: 0 / 0
04.06.2019, 16:36
    #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
04.06.2019, 16:38
    #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
04.06.2019, 16:45
    #39822390
Критик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск процедуры
эти конструкции динамику не ловят,
если она используется, то лучше по тексту кода искать
...
Рейтинг: 0 / 0
04.06.2019, 22:14
    #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
04.06.2019, 22:16
    #39822550
dermama
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск процедуры
Критикэти конструкции динамику не ловят,
если она используется, то лучше по тексту кода искать

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

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


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

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

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

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

my_proc
go
SELECT

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

Конечно, внутренности sys.sql_expression_dependencies скрыты, но что бы он что то запускал, очень маловероятно.
В плане там обычные Clustered Index Scan/Seek из таблиц, никаких вызовов кода нет, кроме типичных проверок прав, определения имени текущей базы и тому подобного.
...
Рейтинг: 0 / 0
05.06.2019, 10:26
    #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
05.06.2019, 10:38
    #39822672
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск процедуры
TaPaKчто там в системном объекте уже хзДа, я и говорю, скрыто. Но план показывает все обращения (блин, и зачем скрывали?)
Не, можно, конечно, посмотреть в присоединённых ресурсах (опять же, и зачем скрывали?), но неохота.
...
Рейтинг: 0 / 0
05.06.2019, 12:37
    #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
05.06.2019, 12:42
    #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
05.06.2019, 13:33
    #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
05.06.2019, 14:21
    #39822843
L_argo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск процедуры
И вот скажите мне, друзья, какими словами можно выразить благодарность разработчику?Он реально преуспел в обфускации.
Видимо жадный заказчик его напарил, но он в долгу не остался.
Теперь заказчик вдвойне платит другому разработчику и доводит его до белого каления.
...
Рейтинг: 0 / 0
05.06.2019, 14:28
    #39822848
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск процедуры
uaggsterИли, например, как вам такое:Скобки у EXEC - лишние.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Поиск процедуры / 25 сообщений из 36, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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