No projeto de migração do SQL Server 2008R2 para SQL Server 2014, ao migrar os logins usando o hash atual das senhas, encontrei o erro Invalid value given for parameter PASSWORD. Specify a valid parameter value, ao pesquisar pelo erro verifiquei que as versões abaixo do SQL Server 2008 o hash das senhas utilizava o algoritmo SHA1, já as versões mais atuais utilizam o algoritmo SHA2 512, sendo incompatível a migração dos 1949 logins utilizando o hash das senhas atuais.
Erros ao migrar os logins: Invalid value given for parameter PASSWORD. Specify a valid parameter value.
Quantidade de logins para migrar:
A solução mais simples seria alterar a senha dos logins, no meu caso seria inviável pela quantidade de logins a serem migrados, para resolver este problema utilizei o SQL Server Data Tools, abaixo demonstro como resolver este problema de forma simples.
1 – Logins atuais do SQL Server 2014:
2 – Baixe e instale o SQL Server Data Tools, pode ser a versão 2015 ou 2017, utilizei a 2015:
3 – Crie um um novo projeto usando o Integration Services:
4 – Utilize o componente transfer Logins Task, configure a origem que é o SQL Server 2008, o destino que neste exemplo é o SQL Server 2014 e a opção de todos os logins, no meu exemplo migrei todos e utilizei a opção skipe IFobjectsExists:
5 – Agora iremos executar o projeto para que todos os logins sejam migrados:
6 – Total de logins migrados para o SQL Server 2014:
7 – Hash SHA1 do login Usuario no SQL Server 2008:
IF(SUSER_ID(‘Usuario’) IS NULL)BEGIN CREATE LOGIN [Usuario] WITH PASSWORD = 0x2131214A2123342E274C4E255C4E544E HASHED;/SQL_LOGIN/ END;
SQL8 – Hash SHA2 512 do login Usuario no SQL Server 2014:
IF(SUSER_ID(‘Usuario’) IS NULL)BEGIN CREATE LOGIN [Usuario] WITH PASSWORD = 0x0200897444663621E635EB01FF63D5BA5DB280C43D7F2A970B85FACDED29F8D8EBA37E22958FDC7416A98A298D7C03E482EA77C7A3DA036CB509B74B3A9E6F1777BA646109CC HASHED;/SQL_LOGIN/ END;
SQL9 – Desbloqueando logins após a migração:
SELECT name, type_desc, is_disabled,+'ALTER LOGIN '+name+' ENABLE;'
FROM sys.server_principals sp
where is_disabled =0
AND SP.name NOT LIKE '##%##'
AND SP.name NOT LIKE '%NT SERVICE\%'
AND SP.name NOT LIKE '%WIN-%'
AND SP.name NOT LIKE '%NT AUTHORITY\%'
AND SP.type_desc <> 'SERVER_ROLE'
AND SP.name NOT IN ('SA','NT AUTHORITY\SYSTEM');
SQLLink do video com o processo realizado: https://1drv.ms/u/s!ApAL5yc5UAJJgeNBJm7klYcRYyVrhA?e=xlXLkU