Você está na página 1de 4

03-02-2010

Como transferir os incios de sesso e

Artigo: 918992 - ltima reviso: tera-feira, 11 de Julho de 2006 - Reviso: 2.3

Como transferir os incios de sesso e as palavras-passe entre


instncias do SQL Server 2005 e SQL Server 2008
C lique aqui para exibir o artigo traduzido e o artigo original em ingls, lado a lado.
responsabilidades para traduo automtica

Ver iseno de

INTRODU O
Este artigo descreve como transferir os incios de sesso e as palavras-passe
entre instncias do Microsoft SQL Server 2005 e SQL Server 2008, em servidores diferentes.
Para obter mais informaes sobre como transferir os incios de sesso e as palavras-passe entre instncias de
outras verses do SQL Server, clique no nmero de artigo que se segue para visualizar o artigo na base de dados
de conhecimento da Microsoft:
246133 (http://support.m icrosoft.com /kb/246133/ ) C omo transferir os incios de
sesso e palavras-passe entre instncias do SQL Server
Mais Informao
Neste artigo, o servidor A e servidor B so servidores diferentes. Alm disso, tanto
o servidor A como o servidor B esto a executar SQL Server 2005.
Nota Estas informaes tambm se aplica ao SQL Server 2008.
Depois de mover uma base de dados da instncia do SQL Server no servidor A para a instncia do SQL Server no
servidor B, os utilizadores podero no conseguir iniciar sesso base de dados no servidor B. Alm disso, os
utilizadores podero receber a seguinte mensagem de erro: Falhou o incio de sesso para o utilizador ' MyUser '.
(Microsoft SQL Server, erro: 18456) Este problema ocorre porque no transferir os incios de sesso e as palavraspasse da instncia do SQL Server no servidor A para a instncia do SQL Server no servidor B.
Para transferir os incios de sesso e as palavras-passe da instncia do SQL Server no servidor A para a instncia do
SQL Server no servidor B, siga estes passos:
1. No servidor A, iniciar o SQL Server Management Studio e, em seguida, ligue para a instncia do SQL Server a
partir do qual moveu a base de dados.
2. Abrir uma nova janela do Editor de consultas e, em seguida, execute o seguinte script.
USE master GO IF OBJECT_ID ('sp_hexadecimal') IS NOT NULL DROP PROCEDURE sp_hexadecimal GO CREATE
PROCEDURE sp_hexadecimal @binvalue varbinary(256), @hexvalue varchar (514) OUTPUT AS DECLARE
@charvalue varchar (514) DECLARE @i int DECLARE @length int DECLARE @hexstring char(16) SELECT
@charvalue = '0x' SELECT @i = 1 SELECT @length = DATALENGTH (@binvalue) SELECT @hexstring =
'0123456789ABCDEF' WHILE (@i <= @length) BEGIN DECLARE @tempint int DECLARE @firstint int DECLARE
@secondint int SELECT @tempint = CONVERT(int, SUBSTRING(@binvalue,@i,1)) SELECT @firstint =
FLOOR(@tempint/16) SELECT @secondint = @tempint - (@firstint*16) SELECT @charvalue = @charvalue +
SUBSTRING(@hexstring, @firstint+1, 1) + SUBSTRING(@hexstring, @secondint+1, 1) SELECT @i = @i + 1 END
SELECT @hexvalue = @charvalue GO IF OBJECT_ID ('sp_help_revlogin') IS NOT NULL DROP PROCEDURE
sp_help_revlogin GO CREATE PROCEDURE sp_help_revlogin @login_name sysname = NULL AS DECLARE @name
sysname DECLARE @type varchar (1) DECLARE @hasaccess int DECLARE @denylogin int DECLARE @is_disabled
int DECLARE @PWD_varbinary varbinary (256) DECLARE @PWD_string varchar (514) DECLARE @SID_varbinary
varbinary (85) DECLARE @SID_string varchar (514) DECLARE @tmpstr varchar (1024) DECLARE
@is_policy_checked varchar (3) DECLARE @is_expiration_checked varchar (3) DECLARE @defaultdb sysname
IF (@login_name IS NULL) DECLARE login_curs CURSOR FOR SELECT p.sid, p.name, p.type, p.is_disabled,
p.default_database_name, l.hasaccess, l.denylogin FROM sys.server_principals p LEFT JOIN sys.syslogins
l ON ( l.name = p.name ) WHERE p.type IN ( 'S', 'G', 'U' ) AND p.name <> 'sa' ELSE DECLARE login_curs
CURSOR FOR SELECT p.sid, p.name, p.type, p.is_disabled, p.default_database_name, l.hasaccess,
l.denylogin FROM sys.server_principals p LEFT JOIN sys.syslogins l ON ( l.name = p.name ) WHERE p.type
IN ( 'S', 'G', 'U' ) AND p.name = @login_name OPEN login_curs FETCH NEXT FROM login_curs INTO
@SID_varbinary, @name, @type, @is_disabled, @defaultdb, @hasaccess, @denylogin IF (@@fetch_status = 1) BEGIN PRINT 'No login(s) found.' CLOSE login_curs DEALLOCATE login_curs RETURN -1 END SET @tmpstr =
'/* sp_help_revlogin script ' PRINT @tmpstr SET @tmpstr = '** Generated ' + CONVERT (varchar,
GETDATE()) + ' on ' + @@SERVERNAME + ' */' PRINT @tmpstr PRINT '' WHILE (@@fetch_status <> -1) BEGIN
IF (@@fetch_status <> -2) BEGIN PRINT '' SET @tmpstr = '-- Login: ' + @name PRINT @tmpstr IF (@type IN

support.microsoft.com/kb/918992/

1/4

03-02-2010

Como transferir os incios de sesso e

( 'G', 'U')) BEGIN -- NT authenticated account/group SET @tmpstr = 'CREATE LOGIN ' + QUOTENAME( @name
) + ' FROM WINDOWS WITH DEFAULT_DATABASE = [' + @defaultdb + ']' END ELSE BEGIN -- SQL Server
authentication -- obtain password and sid SET @PWD_varbinary = CAST( LOGINPROPERTY( @name,
'PasswordHash' ) AS varbinary (256) ) EXEC sp_hexadecimal @PWD_varbinary, @PWD_string OUT EXEC
sp_hexadecimal @SID_varbinary,@SID_string OUT -- obtain password policy state SELECT
@is_policy_checked = CASE is_policy_checked WHEN 1 THEN 'ON' WHEN 0 THEN 'OFF' ELSE NULL END FROM
sys.sql_logins WHERE name = @name SELECT @is_expiration_checked = CASE is_expiration_checked WHEN 1
THEN 'ON' WHEN 0 THEN 'OFF' ELSE NULL END FROM sys.sql_logins WHERE name = @name SET @tmpstr = 'CREATE
LOGIN ' + QUOTENAME( @name ) + ' WITH PASSWORD = ' + @PWD_string + ' HASHED, SID = ' + @SID_string +
', DEFAULT_DATABASE = [' + @defaultdb + ']' IF ( @is_policy_checked IS NOT NULL ) BEGIN SET @tmpstr =
@tmpstr + ', CHECK_POLICY = ' + @is_policy_checked END IF ( @is_expiration_checked IS NOT NULL ) BEGIN
SET @tmpstr = @tmpstr + ', CHECK_EXPIRATION = ' + @is_expiration_checked END END IF (@denylogin = 1)
BEGIN -- login is denied access SET @tmpstr = @tmpstr + '; DENY CONNECT SQL TO ' + QUOTENAME( @name )
END ELSE IF (@hasaccess = 0) BEGIN -- login exists but does not have access SET @tmpstr = @tmpstr + ';
REVOKE CONNECT SQL TO ' + QUOTENAME( @name ) END IF (@is_disabled = 1) BEGIN -- login is disabled SET
@tmpstr = @tmpstr + '; ALTER LOGIN ' + QUOTENAME( @name ) + ' DISABLE' END PRINT @tmpstr END FETCH
NEXT FROM login_curs INTO @SID_varbinary, @name, @type, @is_disabled, @defaultdb, @hasaccess,
@denylogin END CLOSE login_curs DEALLOCATE login_curs RETURN 0 GO
Nota este script cria dois procedimentos armazenados na base de dados principal. A dois procedimentos
armazenados so denominados procedimento sp_hexadecimal armazenados e o procedimento armazenado
sp_help_revlogin.
3. Execute a seguinte instruo.
EXEC sp_help_revlogin
O script de sada que gerado pelo procedimento sp_help_revlogin armazenados o script de incio de
sesso. Este script de incio de sesso cria incios de sesso que tenham o identificador de segurana original
(SID) e a palavra-passe original.
4. No servidor B, inicie o SQL Server Management Studio e, em seguida, ligue para a instncia do SQL Server
qual moveu a base de dados.
Importante Antes de passar para o passo 5, reveja as informaes na seco "Observaes".
5. Abrir uma nova janela do Editor de consultas e, em seguida, execute o script de sada que gerado no passo
3.

Comentrios
Reveja as seguintes informaes antes de executar o script de sada na instncia
no servidor B:
Reveja cuidadosamente o script de sada. Se o servidor A e o servidor B encontram-se em domnios
diferentes, ter de modificar o script de sada. Em seguida, ter de substituir o nome de domnio original com o
novo nome de domnio em instrues C REATE incio de sesso. Incios de sesso integrados que so
concedidos acesso no novo domnio no tem o mesmo SID como os incios de sesso no domnio original. Por
conseguinte, os utilizadores so isolados a partir destes incios de sesso. Para obter mais informaes sobre
como resolver estes utilizadores isolados, clique no nmero de artigo que se segue para visualizar o artigo na
base de dados de conhecimento da Microsoft:
240872 (http://support.m icrosoft.com /k b/240872/ ) C omo
resolver problemas de permisso quando mover uma base de dados entre servidores que esto a executar o
SQL Server
Se o servidor A e o servidor B estiverem no mesmo domnio, utilizado o SID do mesmo. Por
conseguinte, os utilizadores no esto provavelmente ficar isolado.
No script de sada, os incios de sesso so criados utilizando a palavra-passe encriptada. Isto devido, por
exemplo, o argumento HASHED na instruo C REATE incio de sesso. Este argumento especifica que a
palavra-passe que introduzida aps o argumento PASSWORD submetida a hash j que.
Por predefinio, apenas um membro da funo de servidor fixa sysadmin pode executar uma instruo
SELEC T partir da vista sys.server_principals. A menos que um membro de sysadmin corrigido funo de
servidor concede as permisses necessrias para os utilizadores, os utilizadores no possvel criar ou
executar o script de sada.
Os passos descritos neste artigo no transferir as informaes de base de dados predefinido para um incio
de sesso especfico. Isto acontece porque a base de dados predefinida sempre no existe no servidor B.
Para definir a base de dados predefinido para um incio de sesso, utilize a instruo ALTER incio de sesso
por passar o nome de incio de sesso e a base de dados predefinida como argumentos.
A sequncia de ordenao de servidor A poder ser sensvel a maisculas e minsculas e a ordem de

support.microsoft.com/kb/918992/

2/4

03-02-2010

Como transferir os incios de sesso e

ordenao do servidor B poder ser sensvel a maisculas e minsculas. Neste caso, os utilizadores devem
escrever todas as letras nas palavras-passe em maisculas depois de transferir os incios de sesso e as
palavras-passe para a instncia no servidor B.
Em alternativa, pode ser sensvel a sequncia de ordenao de servidor A e a sequncia de ordenao do
servidor B poder ser sensvel a maisculas e minsculas. Neste caso, os utilizadores no possvel registar
no utilizando os incios de sesso e as palavras-passe que transferir para a instncia no servidor B, a menos
que seja uma das seguintes condies verdadeira:
As palavras-passe original contm sem letras.
Todas as letras as palavras-passe original so letras maisculas.
A ordem de ordenao do servidor A e do servidor B poder ser sensvel a maisculas e minsculas ou a
sequncia de ordenao de tanto do servidor A servidor B poder ser sensvel a maisculas e minsculas.
Nestes casos, os utilizadores no detectar um problema.
Um incio de sesso j est a ser a instncia no servidor B pode ter um nome que o mesmo como um nome
no script de sada. Neste caso, receber a seguinte mensagem de erro quando executa o script de sada na
instncia no servidor B: Msg 15025, nvel 16, estado 1, linha 1
O servidor que principal ' MyLogin ' j existe. Do mesmo modo, um incio de sesso j est a ser a instncia
no servidor B pode ter um SID o mesmo que um SID no script de sada. Neste caso, receber a seguinte
mensagem de erro quando executa o script de sada na instncia no servidor B: Msg 15433, nvel 16, estado
1, linha 1
Fornecido parmetro sid est em utilizao. Assim, dever efectuar o seguinte:
1. Reveja cuidadosamente o script de sada.
2. Examinar o contedo da vista de sys.server_principals na instncia no servidor B.
3. Endereo estas mensagens de erro em conformidade.
No SQL Server 2005, o SID para um incio de sesso utilizado como base para a implementao de acesso
a nvel de base de dados. Um incio de sesso poder ter dois SID diferente na duas bases de dados
diferentes num servidor. Neste caso, o incio de sesso s pode aceder base de dados que tenha o SID que
corresponde ao SID na vista de sys.server_principals. Este problema poder ocorrer se as duas bases de
dados esto consolidados de dois servidores diferentes. Para resolver este problema, remova manualmente o
incio de sesso da base de dados que tem um erro de correspondncia de SID utilizando a instruo DROP
USER. Em seguida, adicione novamente o incio de sesso utilizando a instruo C REATE USER.
Referncias
Para mais informaes sobre como resolver problemas de utilizadores isolados,
visite o seguinte Web site da Microsoft Developer Network (MSDN):
http://msdn2.microsoft.com/enus/library/ms175475.aspx (http://m sdn2.m icrosoft.com /e n-us/library/m s175475.aspx )
Para mais informaes sobre
a instruo C REATE incio de sesso, visite o seguinte site da Web MSDN:
http://msdn2.microsoft.com/enus/library/ms189751.aspx (http://m sdn2.m icrosoft.com /e n-us/library/m s189751.aspx )
Para mais informaes sobre
a instruo ALTER incio de sesso, visite o seguinte site da Web MSDN:
http://msdn2.microsoft.com/enus/library/ms189828.aspx (http://m sdn2.m icrosoft.com /e n-us/library/m s189828.aspx )

A informao contida neste artigo aplica-se a:


Microsoft
Microsoft
Microsoft
Microsoft

SQL
SQL
SQL
SQL

Server 2005
2005 Server
Server 2005
2005 Server

Standard Edition
Workgroup
Developer Edition
Enterprise

Palavras-chave: kbmt kbexpertiseadvanced kbhowto kbinfo KB918992 KbMtpt


Traduo automticaIMPORTANTE: Este artigo foi traduzido por um sistema de traduo automtica (tambm
designado por Machine translation ou MT), no tendo sido portanto revisto ou traduzido por humanos. A Microsoft
tem artigos traduzidos por aplicaes (MT) e artigos traduzidos por tradutores profissionais. O objectivo simples:
oferecer em Portugus a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a
traduo automtica no sempre perfeita. Esta pode conter erros de vocabulrio, sintaxe ou gramtica erros
semelhantes aos que um estrangeiro realiza ao falar em Portugus. A Microsoft no responsvel por incoerncias,
erros ou estragos realizados na sequncia da utilizao dos artigos MT por parte dos nossos clientes. A Microsoft
realiza actualizaes frequentes ao software de traduo automtica (MT). Obrigado.C lique aqui para ver a verso
em Ingls deste artigo: 918992 (http://support.m icrosoft.com /k b/918992/e n-us/ )

support.microsoft.com/kb/918992/

3/4

03-02-2010

Como transferir os incios de sesso e

Necessita de mais ajuda?


C ontacte um tcnico de suporte por correio electrnico, Internet ou telefone

Suporte Microsoft

support.microsoft.com/kb/918992/

2010 Microsoft

4/4

Você também pode gostar