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 / 111007
Accepted
Mark Henderson
Mark Henderson
Asked: 2015-08-14 22:32:07 +0800 CST2015-08-14 22:32:07 +0800 CST 2015-08-14 22:32:07 +0800 CST

Um SQL Server 2014 dando hash de senha diferente

  • 772

Eu tenho usado script baseado no script da Microsoft EXEC sp_help_revloginpara sincronizar nomes de usuário e senhas do SQL Server entre hosts. Isso tem funcionado bem há muito tempo no SQL Server 2008 R2, mas com o planejamento de nossa mudança para o SQL Server 2014, encontrei um obstáculo.

Eu tenho três máquinas SQL Server 2014 de preparo. Em todos os servidores eu executo o seguinte comando:

CREATE LOGIN [TestAccount] 
WITH PASSWORD = N'1234567890', 
     DEFAULT_DATABASE = [master], 
     CHECK_EXPIRATION = OFF, CHECK_POLICY = OFF

Para dois deles, recebo um comando "Criar" gerado de:

CREATE LOGIN [TestAccount] 
WITH PASSWORD = 0x010075DDCA54FCEF12CB11C4E64040E877B9FF5872C41EB98095 HASHED, 
     SID = 0xCA78345104805C4E89004969D05D551B, 
     DEFAULT_DATABASE = [master], 
     CHECK_POLICY = OFF, CHECK_EXPIRATION = OFF

Legal. Até agora tudo bem. Mas, no terceiro servidor, recebo um comando "Criar" de:

CREATE LOGIN [TestAccount] 
WITH PASSWORD = 0x02002F6CB52E7F571AD422689021EB9EC1BE2AB4576AE6EC12485333A4CB892A9197B440E1471376A5AAC5160847F636A637D1F499880D7653ABC4DB4714746856E01DE41E09 HASHED, 
     SID = 0x19337EA32254A64F8FC018474B58DBA5, 
     DEFAULT_DATABASE = [master], 
     CHECK_POLICY = OFF, CHECK_EXPIRATION = OFF

O que não funciona. O hash é muito grande.

Existe algum sinalizador de nível de compatibilidade ou algo que de alguma forma eu tenha ativado neste servidor que está gerando hashes de senha antiquados ou algo assim?


Dando a marca de seleção para Ryan como ele estava certo. Na verdade, eu estava me conectando à instância errada instalada nas mesmas máquinas físicas das instâncias do SQL Server 2014. Eu estava muito cansado na noite de sexta-feira.

sql-server sql-server-2014
  • 2 2 respostas
  • 1830 Views

2 respostas

  • Voted
  1. Best Answer
    Reaces
    2015-08-15T01:51:30+08:002015-08-15T01:51:30+08:00

    Isso ocorre porque desde o SQL Server 2012 o algoritmo de hash mudou.

    A partir desta versão, o hash é duas vezes maior.
    Você pode ler sobre as três versões de hash usadas para as várias versões do SQL Server no artigo sp_help_revlogin da Microsoft, em Comentários:

    Uma senha pode ser hash de três maneiras:
    VERSION_LEGACY: Este hash é um hash pré-SQL Server 2000 de 16 bytes.
    VERSION_SHA1: esse hash é gerado usando o algoritmo SHA1 e é usado no SQL Server 2000 até o SQL Server 2008 R2.
    VERSION_SHA2: Este hash é gerado usando o algoritmo SHA2 512 e é usado no SQL Server 2012.

    O que significa que, se você quiser mover um usuário do SQL Server 2012 ou superior para uma instância 2008r2, precisará encontrar um método diferente.


    Eu testei bastante agora. Qualquer usuário criado em SHA1 quando movido usando o hash de senha para um novo servidor de versão (2012+) pode ser movido de volta, desde que a senha não seja alterada. No entanto, qualquer novo usuário criado em 2012+ não poderá ser movido para 2008r2 ou anterior.

    • 8
  2. Julien Vavasseur
    2015-08-15T00:26:13+08:002015-08-15T00:26:13+08:00

    Quando você cria um login, o SQL Server adiciona uma chave salt de 4 bytes a ele (ou seja, senha '12345678' + chave 0x1234abcd) e faz o hash usando o algoritmo SHA.

    Como a chave salt é gerada aleatoriamente, cada hash será diferente, a menos que use a mesma chave duas vezes. (1 de 65k chaves salt possíveis)

    Você pode ver a chave salt no início do hash. Os primeiros 2 bytes são usados ​​para armazenar a versão do algoritmo de hash usado. Os 4 próximos bytes são a chave salt. Os bytes restantes salvam o hash da sua senha.

    Quando você faz login, ele retira a chave salt do hash armazenado, adiciona-a à entrada das janelas de login e faz o hash. Em seguida, compara o resultado com a parte da senha do hash armazenado.

    Com 0x02002F6CB52E7F571AD422689021EB9EC1BE2AB4576AE6EC12485333A4CB892A9197B440E1471376A5AAC5160847F636A637D1F499880D7653ABC4DB4714746856E01DE41E09temos:

    • Versão do cabeçalho = 0x0200

    • Sal = 0x2F6CB52E

    • Senha = 0x7F571AD422689021EB9EC1BE2AB4576AE6EC12485333A4CB892A9197B440E1471376A5AAC5160847F636A637D1F499880D7653ABC4DB4714746856E01DE41E09

    • 2

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

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

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

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