Estou trabalhando em um banco de dados de terceiros.
Quando tento visualizar a definição de uma visão clicando com o botão direito do mouse CREATE TO
e depois em NEW QUERY EDIT WINDOW
, 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 é criptografado.
Eu tenho uma descrição bastante detalhada sobre este problema aqui .
Em suma, o objeto não é realmente criptografado, mas sim ofuscado. Portanto, podemos recuperar o original de volta. O método é um pouco complicado, mas consiste nas seguintes etapas:
Selecione o código ofuscado assim:
Substitua o objeto por outro que tenha o mesmo nome, mesmo object_id e o mesmo comprimento em bytes (por exemplo, usando
ALTER PROCEDURE
)Isso lhe dará o código original. No entanto, como Kin mencionou, pode haver suporte e até implicações legais ao fazer isso, portanto, consulte seu advogado primeiro.
O texto do módulo é criptografado usando uma cifra de fluxo RC4 .
A chave de inicialização RC4 é calculada a partir do hash SHA-1 de:
Convertido de identificador exclusivo para binário(16)
Convertido de inteiro para binário little-endian (4)
Convertido de smallint para little-endian binary(2) .
O sub-ID do objeto do módulo é:
Um usuário com privilégios adequados pode então descriptografar o módulo:
Mais detalhes e uma implementação completa do código no meu artigo:
Os Internos de
WITH ENCRYPTION
Outra ferramenta de terceiros que você pode usar para descriptografar objetos criptografados em tempo real é 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 14 dias de teste gratuito) e eu trabalho para a Red Gate.
Você pode se conectar ao SQL Server usando a Dedicated Administrator Connection (DAC) 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 e funções no SQL Server 2005, 2008 e R2
Como uma nota lateral - se for um banco de dados de terceiros e se você fizer isso no prod, o fornecedor o apoiará? Pode haver um bom motivo para criptografar os SPs ou exibições. Provavelmente é melhor fazer um backup e depois mexer nisso.
Se você quiser visualizar o script DDL original ou descriptografar um objeto criptografado, confira ApexSQL Decrypt
É uma ferramenta autônoma gratuita, com a opção de integrá-la ao SSMS, visualizar o script DDL original. Além disso, você pode descriptografar objetos localizados em vários servidores em um turno. Mais uma ferramenta que pode te ajudar, é o dbForge SQL Decryptor
Um método que uso frequentemente para descriptografar vários procedimentos armazenados ao mesmo tempo...
Use o SQL Compare do RedGate e compare seu banco de dados com um banco de dados vazio (ou qualquer banco de dados que você saiba que não terá os procedimentos armazenados). Crie um script de implantação e copie no SSMS. Localize e substitua WITH ENCRYPTION por espaço em branco. Em seguida, altere 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 valia a pena clicar com o botão direito, copiar e colar em 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.