powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Encryption в SQL2000
8 сообщений из 8, страница 1 из 1
Encryption в SQL2000
    #32030355
Alexxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ситуация: перекомпилирую хранимую процедуру с опцией WITH ENCRYPTION, дабы послать клиенту скрипт с изменениями. Но когда хочу посмотреть зашифрованную процедуру или "Generate SQL Script", то вылезаем такая ошибка "Encrypted object is not transferable, and script can not be generated". В общем фигушки SQL2000 мне покажет мою зашифрованную процедуру и никуда я ее не унесу! А в SQL7 все было нормально!!! Это какое-то странное новшество, наверно безобразно полезное. А как же теперь быть? Может кто-то спотыкался об эти грабли?
...
Рейтинг: 0 / 0
Encryption в SQL2000
    #32030365
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!

Суть опции шифрования состоит в том, чтобы сделать исходный текст недоступным для
просмотра. Но это можно обойти - см. топик про расшифровку кода хранимых процедур
с параметром WITH ENCRYPTION.

Удачи
...
Рейтинг: 0 / 0
Encryption в SQL2000
    #32030473
Alexxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне не нужно видеть исходный тескт процедуры. Нужно отправить файл с процедурой клиенту, но текст процедуры должен быть encrypt. В SQL7 это было без проблем - зашифровал и послал эту абракатабру символов. А в SQL2000 я не могу видеть зашифр. проц. Опция With encrypt это ведь не with Invisible!
...
Рейтинг: 0 / 0
Encryption в SQL2000
    #32030482
Daemon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MSSQL2000 хранит все процедуры в инкрипченом виде (всегда в независимости от того как Вы их сохранили (WITH ENCRYPTION или без этой опциии)), можно убедиться просмотрев таблицу syscoments и поля text и ctext (о полях ниже). В поле ctext хранится инкрипченая часть, а в поле text неинкрипченая. Главная особенность в том, что поле text - вычисляемое (из этого и следует утверждение того, что основная копия хранится в инкрипченом виде) и в случае инкрипченой процедуры это поле пустое, а IMHO SQL не позволяет работать с полем ctext через EnterpriseManager, отсюда невозмржность снять скрипт с инкрипченой пр-ры, но с этим полем можно работать через QUERY. Весь текст хранимой пр-ры размещается в виде нескольких записей с одинаковым id, поэтому если их собрать в одну строку (друг за другом), то получится инкрипченый текст хранимой пр-ры, тот, который был в MSSQL 7.
...
Рейтинг: 0 / 0
Encryption в SQL2000
    #32030489
Alexxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за разъяснения. Мои самые худшие подозрения подтвердились. Буду теперь доставать скрипт зашифрованоой процедуры через одно место. И зачем они так в SQL2000 сделали? (отчасти риторический вопрос)
...
Рейтинг: 0 / 0
Encryption в SQL2000
    #32030494
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброе утро.

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
(простите за такую грубую вставку).

Резюме: сервер может расшифровать код, значит это может сделать кто угодно...

Удачи
...
Рейтинг: 0 / 0
Encryption в SQL2000
    #32030506
Alexxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вообще я использую шифрование процедур лишь как способ защиты их содержимого от нечаянных исправлений. Если посредством проц. выполняются какие-то критичные денежные операции, то лучше не трогать исходный текст. Если клиент захочет видеть проц.в первозданном виде - пжалуста - предоставлю, но тогда я снимаю с себя ответственность за возможную неккоректную работу проц. Это конечно весьма условная защита - согласен тут с 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
...
Рейтинг: 0 / 0
Encryption в SQL2000
    #32030563
Фотография jimmers
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый вечер,

Хочу поблагодарить 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,
назначение которой пока неясно.

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


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