AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 60129
Accepted
goofyui
goofyui
Asked: 2014-03-05 12:08:19 +0800 CST2014-03-05 12:08:19 +0800 CST 2014-03-05 12:08:19 +0800 CST

Como exibir uma exibição criptografada ou um procedimento armazenado

  • 772

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 TOe 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.

sql-server sql-server-2008
  • 6 6 respostas
  • 104630 Views

6 respostas

  • Voted
  1. Sebastian Meine
    2014-03-05T16:04:29+08:002014-03-05T16:04:29+08:00

    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:

    1. Conecte-se à instância usando a conexão de administrador dedicada
    2. Selecione o código ofuscado assim:

      SELECT @secret = imageval
      FROM   sys.sysobjvalues
      WHERE  objid = OBJECT_ID(@object_name);
      
    3. Substitua o objeto por outro que tenha o mesmo nome, mesmo object_id e o mesmo comprimento em bytes (por exemplo, usando ALTER PROCEDURE)

    4. Obtenha o código recém-obfuscado da mesma maneira que acima
    5. XOR os três valores juntos (original ofuscado, substituição e substituição ofuscada)

    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.

    • 21
  2. Paul White
    2016-05-22T22:19:30+08:002016-05-22T22:19:30+08:00

    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:

    • O GUID da família de banco de dados (de sys.database_recovery_status )
      Convertido de identificador exclusivo para binário(16)
    • O ID do objeto do módulo (das visualizações do catálogo)
      Convertido de inteiro para binário little-endian (4)
    • O sub-ID do objeto do módulo
      Convertido de smallint para little-endian binary(2) .

    O sub-ID do objeto do módulo é:

    • 1 para um procedimento armazenado não numerado; ou
    • O número do procedimento para um procedimento armazenado numerado (reprovado); ou
    • 0 caso contrário.

    Um usuário com privilégios adequados pode então descriptografar o módulo:

    1. Obtendo o binário criptografado de sys.sysobjvalues ​​(usando o DAC)
    2. Calculando a chave RC4 conforme detalhado acima
    3. Executando o algoritmo RC4 padrão bem conhecido no binário
    4. Convertendo o resultado de binário para nvarchar(max)

    Mais detalhes e uma implementação completa do código no meu artigo:

    Os Internos deWITH ENCRYPTION

    • 17
  3. Best Answer
    michristofides
    2014-03-07T02:51:55+08:002014-03-07T02:51:55+08:00

    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.

    • 14
  4. Kin Shah
    2014-03-05T12:16:13+08:002014-03-05T12:16:13+08:00

    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:

    admin:Your_Servername
    

    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.

    • 11
  5. McRobert
    2017-10-16T22:46:45+08:002017-10-16T22:46:45+08:00

    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

    • 9
  6. Aaron Hurst
    2019-04-26T09:53:53+08:002019-04-26T09:53:53+08:00

    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.

    • 1

relate perguntas

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Quanto "Padding" coloco em meus índices?

  • Existe um processo do tipo "práticas recomendadas" para os desenvolvedores seguirem para alterações no banco de dados?

  • Como determinar se um Índice é necessário ou necessário

  • Downgrade do SQL Server 2008 para 2005

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve