Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Перенос криптованных процедур  [new]
novice-13
Member

Откуда:
Сообщений: 3
Ситуация такова: на локальном сервере есть бекапы баз под MS SQL 2008, нужно каким либо образом перенести базы на MS SQL 2005, а лучше на MS SQL 2000. Ситуация осложняется тем, что в одной из баз есть 16 закриптованных процедур. Буду рад любому совету или помощи, так как пока ничего из себя не представляю по части SQL в целом и MS SQL в частности.

P.S. Поиск использовал, ничего дельного не нашел.
28 апр 10, 03:44    [8699562]     Ответить | Цитировать Сообщить модератору
 Re: Перенос криптованных процедур  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
novice-13,

расшифровка этих процедур занимает 5 минут, расшифровывайте и переносите в виде скрипта
28 апр 10, 06:51    [8699621]     Ответить | Цитировать Сообщить модератору
 Re: Перенос криптованных процедур  [new]
Neumexa
Member

Откуда:
Сообщений: 202
Knyazev Alexey
novice-13,

расшифровка этих процедур занимает 5 минут, расшифровывайте и переносите в виде скрипта


не мог бы скинуть ссылку на расшифровку в 2005 или 2008.

p.s. расшифровка в 2000 я нашел
28 апр 10, 09:15    [8699853]     Ответить | Цитировать Сообщить модератору
 Re: Перенос криптованных процедур  [new]
Neumexa
Member

Откуда:
Сообщений: 202
Knyazev Alexey
novice-13,

расшифровка этих процедур занимает 5 минут, расшифровывайте и переносите в виде скрипта


не мог бы скинуть ссылку на расшифровку в 2005 или 2008.

p.s. расшифровка в 2000 я нашел
28 апр 10, 09:16    [8699860]     Ответить | Цитировать Сообщить модератору
 Re: Перенос криптованных процедур  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
Neumexa
Knyazev Alexey
novice-13,

расшифровка этих процедур занимает 5 минут, расшифровывайте и переносите в виде скрипта


не мог бы скинуть ссылку на расшифровку в 2005 или 2008.

p.s. расшифровка в 2000 я нашел


тынц
28 апр 10, 09:37    [8699972]     Ответить | Цитировать Сообщить модератору
 Re: Перенос криптованных процедур  [new]
Neumexa
Member

Откуда:
Сообщений: 202
Knyazev Alexey
Neumexa
Knyazev Alexey
novice-13,

расшифровка этих процедур занимает 5 минут, расшифровывайте и переносите в виде скрипта


не мог бы скинуть ссылку на расшифровку в 2005 или 2008.

p.s. расшифровка в 2000 я нашел


тынц


мда полнейший бред... - уже заходил на этот сайт и ссылка была заблочена.
Knyazev Alexey - спасибо.
28 апр 10, 09:52    [8700049]     Ответить | Цитировать Сообщить модератору
 Re: Перенос криптованных процедур  [new]
programmator
Member

Откуда: ru
Сообщений: 355
novice-13
Ситуация такова: на локальном сервере есть бекапы баз под MS SQL 2008, нужно каким либо образом перенести базы на MS SQL 2005, а лучше на MS SQL 2000. Ситуация осложняется тем, что в одной из баз есть 16 закриптованных процедур. Буду рад любому совету или помощи, так как пока ничего из себя не представляю по части SQL в целом и MS SQL в частности.

P.S. Поиск использовал, ничего дельного не нашел.


Если в Москве или МО возьму недорого.
28 апр 10, 10:07    [8700140]     Ответить | Цитировать Сообщить модератору
 Re: Перенос криптованных процедур  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35394
Блог
-- 1) Подключится в режиме DAC
-- 2) Выполнить
ALTER PROCEDURE [dbo].[procDecryptObject] 
( 
	@Schema NVARCHAR(128)=N'dbo', 
	@ObjectName NVARCHAR(128)=N'myproc'
) AS
BEGIN

DECLARE @i INT
DECLARE @ObjectDataLength INT
DECLARE @ContentOfEncryptedObject NVARCHAR(MAX)
DECLARE @ContentOfDecryptedObject NVARCHAR(MAX)
DECLARE @ContentOfFakeObject NVARCHAR(MAX)
DECLARE @ContentOfFakeEncryptedObject NVARCHAR(MAX)
DECLARE @ObjectType NVARCHAR(128)
DECLARE @ObjectID INT

SET NOCOUNT ON

SET @ObjectID = OBJECT_ID('[' + @Schema + '].[' + @ObjectName + ']')

-- Check that the provided object exists in the database.
IF @ObjectID IS NULL
BEGIN
	RAISERROR('The object name or schema provided does not exist in the database', 16, 1)
	RETURN
END

-- Check that the provided object is encrypted.
IF NOT EXISTS(SELECT TOP 1 * FROM syscomments WHERE id = @ObjectID AND encrypted = 1)
BEGIN
	RAISERROR('The object provided exists however it is not encrypted. Aborting.', 16, 1)
	RETURN
END

-- Determine the type of the object
IF OBJECT_ID('[' + @Schema + '].[' + @ObjectName + ']', 'PROCEDURE') IS NOT NULL
	SET @ObjectType = 'PROCEDURE'
ELSE
	IF OBJECT_ID('[' + @Schema + '].[' + @ObjectName + ']', 'TRIGGER') IS NOT NULL
		SET @ObjectType = 'TRIGGER'
	ELSE
		IF OBJECT_ID('[' + @Schema + '].[' + @ObjectName + ']', 'VIEW') IS NOT NULL
			SET @ObjectType = 'VIEW'
		ELSE
			SET @ObjectType = 'FUNCTION'

-- Get the binary representation of the object- syscomments no longer holds
-- the content of encrypted object.
SELECT TOP 1 @ContentOfEncryptedObject = imageval
FROM sys.sysobjvalues
WHERE objid = OBJECT_ID('[' + @Schema + '].[' + @ObjectName + ']')
        AND valclass = 1 and subobjid = 1

SET @ObjectDataLength = DATALENGTH(@ContentOfEncryptedObject)/2


-- We need to alter the existing object and make it into a dummy object
-- in order to decrypt its content. This is done in a transaction
-- (which is later rolled back) to ensure that all changes have a minimal
-- impact on the database.
SET @ContentOfFakeObject = N'ALTER ' + @ObjectType + N' [' + @Schema + N'].[' + @ObjectName + N'] WITH ENCRYPTION AS'

WHILE DATALENGTH(@ContentOfFakeObject)/2 < @ObjectDataLength
BEGIN
        IF DATALENGTH(@ContentOfFakeObject)/2 + 4000 < @ObjectDataLength
                SET @ContentOfFakeObject = @ContentOfFakeObject + REPLICATE(N'-', 4000)
        ELSE
                SET @ContentOfFakeObject = @ContentOfFakeObject + REPLICATE(N'-', @ObjectDataLength - (DATALENGTH(@ContentOfFakeObject)/2))
END

-- Since we need to alter the object in order to decrypt it, this is done
-- in a transaction
SET XACT_ABORT OFF
BEGIN TRAN

EXEC(@ContentOfFakeObject)

IF @@ERROR <> 0
        ROLLBACK TRAN

-- Get the encrypted content of the new "fake" object.
SELECT TOP 1 @ContentOfFakeEncryptedObject = imageval
FROM sys.sysobjvalues
WHERE objid = OBJECT_ID('[' + @Schema + '].[' + @ObjectName + ']')
        AND valclass = 1 and subobjid = 1

IF @@TRANCOUNT > 0
        ROLLBACK TRAN

-- Generate a CREATE script for the dummy object text.
SET @ContentOfFakeObject = N'CREATE ' + @ObjectType + N' [' + @Schema + N'].[' + @ObjectName + N'] WITH ENCRYPTION AS'

WHILE DATALENGTH(@ContentOfFakeObject)/2 < @ObjectDataLength
BEGIN
        IF DATALENGTH(@ContentOfFakeObject)/2 + 4000 < @ObjectDataLength
                SET @ContentOfFakeObject = @ContentOfFakeObject + REPLICATE(N'-', 4000)
        ELSE
                SET @ContentOfFakeObject = @ContentOfFakeObject + REPLICATE(N'-', @ObjectDataLength - (DATALENGTH(@ContentOfFakeObject)/2))
END


SET @i = 1

--Fill the variable that holds the decrypted data with a filler character
SET @ContentOfDecryptedObject = N''

WHILE DATALENGTH(@ContentOfDecryptedObject)/2 < @ObjectDataLength
BEGIN
        IF DATALENGTH(@ContentOfDecryptedObject)/2 + 4000 < @ObjectDataLength
                SET @ContentOfDecryptedObject = @ContentOfDecryptedObject + REPLICATE(N'A', 4000)
        ELSE
                SET @ContentOfDecryptedObject = @ContentOfDecryptedObject + REPLICATE(N'A', @ObjectDataLength - (DATALENGTH(@ContentOfDecryptedObject)/2))
END


WHILE @i <= @ObjectDataLength
BEGIN
        --xor real & fake & fake encrypted
        SET @ContentOfDecryptedObject = STUFF(@ContentOfDecryptedObject, @i, 1,
                NCHAR(
                        UNICODE(SUBSTRING(@ContentOfEncryptedObject, @i, 1)) ^
                        (
                                UNICODE(SUBSTRING(@ContentOfFakeObject, @i, 1)) ^
                                UNICODE(SUBSTRING(@ContentOfFakeEncryptedObject, @i, 1))
                        )))

        SET @i = @i + 1
END

-- PRINT the content of the decrypted object
PRINT(@ContentOfDecryptedObject)

END
28 апр 10, 10:16    [8700182]     Ответить | Цитировать Сообщить модератору
 Re: Перенос криптованных процедур  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35394
Блог
DAC-режим: ADMIN:имя_сервера
Замечу, что окошко Object Explorer`а не поддерживает DAC.
Такое подключение нужно использовать в том окошке, где вы пишите код.
28 апр 10, 10:21    [8700211]     Ответить | Цитировать Сообщить модератору
 Re: Перенос криптованных процедур  [new]
Neumexa
Member

Откуда:
Сообщений: 202
Критик
DAC-режим: ADMIN:имя_сервера
Замечу, что окошко Object Explorer`а не поддерживает DAC.
Такое подключение нужно использовать в том окошке, где вы пишите код.

вопрос - если не в DAC, вручную -U sa -P passwd -d test ?
28 апр 10, 10:24    [8700227]     Ответить | Цитировать Сообщить модератору
 Re: Перенос криптованных процедур  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35394
Блог
Вам же Knyazev Alexey дал ссылку, там все есть.
SQLCMD -A
28 апр 10, 10:26    [8700235]     Ответить | Цитировать Сообщить модератору
 Re: Перенос криптованных процедур  [new]
Neumexa
Member

Откуда:
Сообщений: 202
Критик
Вам же Knyazev Alexey дал ссылку, там все есть.
SQLCMD -A

почему не работает DAC?
сделал следующее
sp_configure 'remote admin connections',1
reconfigure
28 апр 10, 10:31    [8700263]     Ответить | Цитировать Сообщить модератору
 Re: Перенос криптованных процедур  [new]
Neumexa
Member

Откуда:
Сообщений: 202
также попытался использовать запрос к ядру СУБД.
Что не так?
28 апр 10, 11:06    [8700580]     Ответить | Цитировать Сообщить модератору
 Re: Перенос криптованных процедур  [new]
Glory
Member

Откуда:
Сообщений: 104751
Neumexa
также попытался использовать запрос к ядру СУБД.
Что не так?

Очередной конкурс "Угадай, что и где я делаю и какую ошибку получаю" ?
28 апр 10, 11:09    [8700602]     Ответить | Цитировать Сообщить модератору
 Re: Перенос криптованных процедур  [new]
Neumexa
Member

Откуда:
Сообщений: 202
Glory
Neumexa
также попытался использовать запрос к ядру СУБД.
Что не так?

Очередной конкурс "Угадай, что и где я делаю и какую ошибку получаю" ?

Glory забей.
28 апр 10, 11:12    [8700649]     Ответить | Цитировать Сообщить модератору
 Re: Перенос криптованных процедур  [new]
Glory
Member

Откуда:
Сообщений: 104751
Neumexa
Glory
Neumexa
также попытался использовать запрос к ядру СУБД.
Что не так?

Очередной конкурс "Угадай, что и где я делаю и какую ошибку получаю" ?

Glory забей.

Уже тянусь к кнопке бана
28 апр 10, 11:13    [8700657]     Ответить | Цитировать Сообщить модератору
 Re: Перенос криптованных процедур  [new]
Neumexa
Member

Откуда:
Сообщений: 202
Glory
Neumexa
Glory
Neumexa
также попытался использовать запрос к ядру СУБД.
Что не так?

Очередной конкурс "Угадай, что и где я делаю и какую ошибку получаю" ?

Glory забей.

Уже тянусь к кнопке бана

ух ты
28 апр 10, 11:14    [8700665]     Ответить | Цитировать Сообщить модератору
 Re: Перенос криптованных процедур  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
Neumexa
также попытался использовать запрос к ядру СУБД.
Что не так?


http://msdn.microsoft.com/ru-ru/library/ms189595.aspx
28 апр 10, 11:15    [8700680]     Ответить | Цитировать Сообщить модератору
 Re: Перенос криптованных процедур  [new]
Glory
Member

Откуда:
Сообщений: 104751
Neumexa
Glory
Neumexa
Glory
Neumexa
также попытался использовать запрос к ядру СУБД.
Что не так?

Очередной конкурс "Угадай, что и где я делаю и какую ошибку получаю" ?

Glory забей.

Уже тянусь к кнопке бана

ух ты

Модератор: Забанен на 24часа, чтобы было время самому почитать документацию и Рекомендации по оформлению сообщений
28 апр 10, 11:18    [8700706]     Ответить | Цитировать Сообщить модератору
 Re: Перенос криптованных процедур  [new]
novice-13
Member

Откуда:
Сообщений: 3
Всем спасибо! Даже не ожидал такую бурную реакцию... Может кто-нибудь ещё подсказать, где можно посмотреть "текст в открытом виде"? ))) Подключился в режиме DAC, ввел в строку EXECUTE dbo.procDecryptObject2005 'dbo', 'TestProc' (При том, что обе используемые процедуры лежат в базе master в процедурах), нажал ввод и коммандная строка перескакивает на следующую комманду. Немного непонятная проблема. Или если процедура сразу создает скрипт, то где его посмотреть?
28 апр 10, 14:24    [8702364]     Ответить | Цитировать Сообщить модератору
 Re: Перенос криптованных процедур  [new]
novice-13
Member

Откуда:
Сообщений: 3
Все, решил проблему через SSMS:
1)Открыл SSMS
2)Отказался от входа
3)Закрыл Object Explorer (дерево каталога)
4)Открыл New Query(Новый запрос)
5)В поле Server Name(Имя сервера) ввел значение ADMIN:(local)
6)Выполнил запрос вида:
EXEC [dbo].[procDecryptObject2005]
	@Schema=N'dbo',
	@ObjectName=N'TestProc'
GO
28 апр 10, 15:45    [8703047]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Перенос криптованных процедур  [new]
Obi-Van
Member

Откуда:
Сообщений: 49
В Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64)
не работает у меня процедура. В SQL 2005 работает.
21 июл 11, 02:06    [11003886]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить