Estou trabalhando em um banco de dados de terceiros.
Quando tento visualizar a definição de uma visualização clicando com o botão direito do mouse CREATE TO
e , em seguida NEW QUERY EDIT WINDOW
, em , estou recebendo um erro:
Esta propriedade pode não existir para este objeto ou pode não ser recuperável devido a direitos de acesso insuficientes. O texto está criptografado.
-- Encrypted text
Respostas:
Outra ferramenta de terceiros que você pode usar para descriptografar objetos criptografados rapidamente é o SQL Prompt do Red Gate: http://www.red-gate.com/products/sql-development/sql-prompt/features
Passar o mouse sobre o procedimento armazenado permitirá que você veja o script de criação descriptografado.
Isenções de responsabilidade: esta ferramenta é comercial (com uma avaliação gratuita de 14 dias) e eu trabalho na Red Gate.
fonte
Eu tenho uma descrição bastante detalhada sobre esse problema aqui .
Em resumo, o objeto não é realmente criptografado, mas ofuscado. Portanto, podemos recuperar o original de volta. O método está um pouco envolvido, mas consiste nas seguintes etapas:
Selecione o código ofuscado assim:
Substitua o objeto por outro que tenha o mesmo nome id_do_objeto e o mesmo comprimento em bytes (por exemplo, usando
ALTER PROCEDURE
)Isso fornecerá o código original. No entanto, como Kin mencionou, pode haver apoio e até implicações legais para fazer isso; consulte seu advogado primeiro.
fonte
O texto do módulo é criptografado usando uma cifra de fluxo RC4 .
A chave de inicialização do RC4 é calculada a partir do hash SHA-1 de:
Convertido de uniqueidentifier em binário (16)
Convertido de número inteiro em binário little-endian (4)
Convertido de binário smallint para little-endian (2) .
O sub ID do objeto do módulo é:
Um usuário com privilégios adequados pode descriptografar o módulo:
Mais detalhes e uma implementação completa do código no meu artigo:
Os internos de
WITH ENCRYPTION
fonte
Você pode conectar-se ao SQL Server usando o DAC (Dedicated Administrator Connection) e exibir o texto sql do procedimento armazenado. Conecte-se ao DAC usando:
Você pode encontrar as etapas completas necessárias nesta resposta no Stack Overflow de Martin Smith .
Outra alternativa é usar alguns scripts de terceiros, conforme mencionado em Descriptografando procedimentos armazenados criptografados, exibições, funções no SQL Server 2005, 2008 e R2
Como observação lateral - se for um banco de dados de terceiros e se você o fizer no prod, o fornecedor o apoiará? Pode haver um bom motivo para criptografar os SPs ou visualizações. Provavelmente é melhor fazer um backup e depois mexer com isso.
fonte
Se você deseja visualizar o script DDL original ou descriptografar um objeto criptografado, consulte o ApexSQL Decrypt
É uma ferramenta autônoma gratuita, com uma opção para integrá-lo ao SSMS, visualizar o script DDL original. Além disso, você pode descriptografar objetos localizados em vários servidores de uma vez. Mais uma ferramenta que pode ajudá-lo é o dbForge SQL Decryptor
fonte
Um método usado com freqüência para descriptografar vários procedimentos armazenados de cada vez ...
Use o SQL Compare da RedGate e compare seu banco de dados com um banco de dados vazio (ou qualquer banco de dados que você conheça não terá os procedimentos armazenados). Crie um script de implantação e copie para o SSMS. Encontre e substitua WITH ENCRYPTION pelo espaço em branco. Em seguida, mude o CREATE PROCEDURE para ALTER PROCEDURE. Execute o script RedGate no banco de dados original e você removeu toda a criptografia de procedimento armazenado.
Eu tinha um banco de dados com mais de 400 procedimentos armazenados e, embora o SQL Prompt seja útil, não valeu a pena clicar com o botão direito do mouse, copiar e colar nos mais de 400 procedimentos armazenados. Usando o RedGate SQL Compare, consegui remover a criptografia dos meus mais de 400 procedimentos armazenados em aproximadamente 10 minutos do início ao fim.
fonte