Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Encryption в SQL2000
|
|||
|---|---|---|---|
|
#18+
Ситуация: перекомпилирую хранимую процедуру с опцией WITH ENCRYPTION, дабы послать клиенту скрипт с изменениями. Но когда хочу посмотреть зашифрованную процедуру или "Generate SQL Script", то вылезаем такая ошибка "Encrypted object is not transferable, and script can not be generated". В общем фигушки SQL2000 мне покажет мою зашифрованную процедуру и никуда я ее не унесу! А в SQL7 все было нормально!!! Это какое-то странное новшество, наверно безобразно полезное. А как же теперь быть? Может кто-то спотыкался об эти грабли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2002, 09:22 |
|
||
|
Encryption в SQL2000
|
|||
|---|---|---|---|
|
#18+
Добрый день! Суть опции шифрования состоит в том, чтобы сделать исходный текст недоступным для просмотра. Но это можно обойти - см. топик про расшифровку кода хранимых процедур с параметром WITH ENCRYPTION. Удачи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.05.2002, 10:32 |
|
||
|
Encryption в SQL2000
|
|||
|---|---|---|---|
|
#18+
Мне не нужно видеть исходный тескт процедуры. Нужно отправить файл с процедурой клиенту, но текст процедуры должен быть encrypt. В SQL7 это было без проблем - зашифровал и послал эту абракатабру символов. А в SQL2000 я не могу видеть зашифр. проц. Опция With encrypt это ведь не with Invisible! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2002, 05:11 |
|
||
|
Encryption в SQL2000
|
|||
|---|---|---|---|
|
#18+
MSSQL2000 хранит все процедуры в инкрипченом виде (всегда в независимости от того как Вы их сохранили (WITH ENCRYPTION или без этой опциии)), можно убедиться просмотрев таблицу syscoments и поля text и ctext (о полях ниже). В поле ctext хранится инкрипченая часть, а в поле text неинкрипченая. Главная особенность в том, что поле text - вычисляемое (из этого и следует утверждение того, что основная копия хранится в инкрипченом виде) и в случае инкрипченой процедуры это поле пустое, а IMHO SQL не позволяет работать с полем ctext через EnterpriseManager, отсюда невозмржность снять скрипт с инкрипченой пр-ры, но с этим полем можно работать через QUERY. Весь текст хранимой пр-ры размещается в виде нескольких записей с одинаковым id, поэтому если их собрать в одну строку (друг за другом), то получится инкрипченый текст хранимой пр-ры, тот, который был в MSSQL 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2002, 06:08 |
|
||
|
Encryption в SQL2000
|
|||
|---|---|---|---|
|
#18+
Спасибо за разъяснения. Мои самые худшие подозрения подтвердились. Буду теперь доставать скрипт зашифрованоой процедуры через одно место. И зачем они так в SQL2000 сделали? (отчасти риторический вопрос) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2002, 06:46 |
|
||
|
Encryption в SQL2000
|
|||
|---|---|---|---|
|
#18+
Доброе утро. 2Alexxx: Сразу оговорюсь, что я работаю на MS SQL Server 2000, поэтому сказать про 7 версию точно не могу. Не исключено, что какими-либо недокументированными способами можно было сделать передачу непосредственно зашифрованного кода хранимой процедуры с одного сервера на другой. Однако, я не могу представить себе вид такого SQL скрипта - приведите его, пожалуйста, если можете. 2Daemon: Простите, но Вы не правы. Для того, что бы убедиться, что сервер хранит процедуры, созданные без опции WITH ENCRYPTION , в незашифрованном виде, создайте любую процедуру и выполните запрос: \nselect CAST(ctext AS varchar(8000)), text from syscomments where id = object_id('MyProc') Далее, если повторить то же для процедуры, созданной с опцией шифрования, то будет ясно, что код зашифрован. Кроме того, Books Online содержит описание таблицы syscomments, где сказано, что поля ctext & text содержат Actual text of the SQL definition statement (простите за такую грубую вставку). Резюме: сервер может расшифровать код, значит это может сделать кто угодно... Удачи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2002, 07:16 |
|
||
|
Encryption в SQL2000
|
|||
|---|---|---|---|
|
#18+
Вообще я использую шифрование процедур лишь как способ защиты их содержимого от нечаянных исправлений. Если посредством проц. выполняются какие-то критичные денежные операции, то лучше не трогать исходный текст. Если клиент захочет видеть проц.в первозданном виде - пжалуста - предоставлю, но тогда я снимаю с себя ответственность за возможную неккоректную работу проц. Это конечно весьма условная защита - согласен тут с Jimmers: >сервер может расшифровать код, значит это может сделать кто угодно... но это лучше чем ничего. Для Jimmers: Эта простенькая процедура возвращает текущую дату. Можешь запустить и проверить. Скрипт сгенерирован самим SQL (правда семеркой). if exists (select * from sysobjects where id = object_id(N'[dbo].[GetMyDate]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[GetMyDate] GO SET QUOTED_IDENTIFIER OFF SET ANSI_NULLS ON GO exec(decrypt(0x4CAFD1771AB283A69C1A88839C439A5182D4765C9BDD2E6316B9DFBDAF51326A47537E5FB1275ACE3FC13C6F4967B1DD408E30A798154591725B4B41D0D1FFFD6C0D5273C20D8CDFF4E5335B92A0410D286EC8CAB06B4FDE515D5CF8848202114BD2D260FBB06B1665ACA6B8690E30372C924561FE91C70869C4ADE87947E939B35471CAE28990FAD8397D6DA655C112A12C778D020EA3A8BA7FC3E6AF5BA8162F8717FE336E1B78A2465FD6C9E84ED054124C6A09FD6475B1ED57E7A11368164D49BDB8DFACBE3FFCF8074BDA3EB340CF5CAF1F42BC26F54636F8D047CF9AA45C8AEE5D12719EF6E78B40B3CB5A758129D08E94F6AF405A38E020285211F533715CA65DDEA4EE786DC2DF3D710FD67CF15C085B9EE88022EB144121BD51E6BDF744B93550183A874F741CDBA29B0F3BB7F4F8AAC4E911421FB89A6266EB904088953F43E521B8AB032F4EDA4309C3C2B5D757713C0216CD98B8C56CFF43BBA91D6C9010B8BE4FB7CDA5FD626A000CE1B404C187CEAD960663AE814DDA21152AA27906230C5A2EED6C39179F0344465E5F38479D1370A45B923D742C2FDE7134796558C0DA5BB257B7CC13FE76962950110D3020B3F95F45FEC9688CF57C16C7EF3D3839473206E83C939E900509B9013AD0512098F69CDE7865E819A2891D03C238EF8612C99BF445CC913855BE08EE6F3FBFDF2BE7B03AF0A0168102075BD2C203D033C8C76C7F5ECAA1B0FBA3CBB6D96D83ACF3A175FBBDED2324A998A6C785A93208C5CAAADE0A64298D198956473D7FA7F716FA074CF58D5612EA361C21ACE8BDF0696F54F4D38039E357D4010BF486F772161C743DD88014B46489D47FE93CD77752D4AB82E80D9323BE1DFC3CCE117BC8FB8A44EB2189FB46C970F89D87F7EFC36699B7ACCE488E2F4FBA0B5D829CA0604B5EDB8ACBC5D86A1A87DE50C2677A8F15CA77A344B90EC4B086EC2275C87E1A3387710420899443944543BB8602DDCB7508861262BE9E351492606CEA011601681979FC3F857ED7F9AFFC6A70A3D550BD5384B33FCF04C2D0B425B4513530AFBE90D27E2A73FA950893EE667DE526F7DF0B8A1D004EB8F3456EF020CE56D0E5272603BD402821EBB8D2ADC510AAD8A81520399B42D2DBECE168D7962528F4B33200353B3769E078CDA389C97AAB957A9015E9935A9E748A57EBFD76CE0404DF3A2C87EAAB1F14A8A15E718C94AADEA337BA623318224A86D1BA2F4710CEF248B1EA2074AE9CECBC0559B63A9DDAA1FFB5CC5C4FC8A8455013338494D929CC131BE66EE2121D3CC34CF1FA8032A5159014C820838BEFA927BBD0E5F759CB )) GO SET QUOTED_IDENTIFIER OFF SET ANSI_NULLS ON GO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2002, 08:00 |
|
||
|
Encryption в SQL2000
|
|||
|---|---|---|---|
|
#18+
Добрый вечер, Хочу поблагодарить Alexxx за интересную тему. MS SQL Server 7 предоставляет код хранимой процедуры, созданной с опцией шифрования для просмотра в виде шестнадцатеричного числа, полученного примерно так: code:select convert(varbinary(8000), c.text) from syscomments c where c.id = object_id('MyProc') Далее на любом другом сервере (7 и 2000) можно проиграть полученный код при помощи конструкции code:EXEC(decrypt(0x123456...)) где 0x123456.... - это итог предыдущего SELECT'а. Однако, в версии 2000, это не приводит к появлению в поле ctext 0x123456..., что говорит о том, что механизм шифрования был изменен при переходе к новой версии. Также хочу отметить, что функцию decrypt не удается никак вызвать, кроме способа EXEC(decrypt()), что, видимо, должно было служить некой защитой... Замечу также, что при дизассемблировании кода sqlservr.exe встретилась еще одна функция - decrypt_a, назначение которой пока неясно. Удачи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.05.2002, 20:22 |
|
||
|
|

start [/forum/topic.php?fid=46&tid=1822707]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
30ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 222ms |
| total: | 321ms |

| 0 / 0 |
