2009년 11월 18일 수요일

DB 계정 및 암호를 전송

SQL Server인스턴스 간에 로그인 및 암호를 전송하는 방법

요약
새 서버로 데이터베이스를 이동한 후 사용자가 새 서버에서 로그인하지 못할 수 있으며 다음과 같은 오류 메시지가 나타납니다.
메시지 18456, 수준 16, 상태 1 '%ls' 사용자가 로그인하지 못했습니다.
새 서버로 로그인과 암호를 전송해야 합니다. 이 문서에서는 새 서버로 로그인과 암호를 전송하는 방법을 설명합니다.

SQL Server 7.0을 실행하는 서버 간에 로그인 및 암호를 전송하는 방법

SQL Server 7.0 DTS(데이터 변환 서비스) 개체 전송 기능을 사용하면 두 서버 간에 로그인 및 사용자를 전송할 수 있지만 SQL Server의 인증된 로그인에 대한 암호는 전송할 수 없습니다. SQL Server 7.0을 실행하는 한 서버에서 SQL Server 7.0을 실행하는 다른 서버로 로그인과 암호를 전송하려면 "서로 다른 버전의 SQL Server 간에 로그인 및 암호를 전송하는 방법" 절에 나와 있는 단계를 수행하십시오.

SQL Server 7.0에서 SQL Server 2000으로 또는 SQL Server 2000을 실행하는 서버 간에 로그인 및 암호를 전송하는 방법
SQL Server 7.0 서버에서 SQL Server 2000 인스턴스로 또는 두 SQL Server 2000 인스턴스 간에 로그인과 암호를 전송하려면 SQL Server 2000에서 새로운 DTS 패키지 로그인 전송 작업을 사용하면 됩니다. 이렇게 하려면 다음과 같이 하십시오.
1. SQL Server 2000 대상 서버에 연결하여 SQL SQL Server 엔터프라이즈 관리자에서 데이터 변환 서비스로 이동하고 폴더를 확장한 다음 로컬 패키지를 마우스 오른쪽 단추로 누르고 새 패키지를 누릅니다.
2. DTS 패키지 디자이너가 열리면 작업 메뉴에서 로그인 전송 작업을 누릅니다. 원본, 대상 및 로그인 탭에 대한 정보를 적절하게 완성합니다. 중요 SQL Server 2000 대상 서버에서는 64비트 버전의 SQL Server 2000을 실행할 수 없습니다. 64비트 버전의 SQL Server 2000용 DTS 구성 요소를 사용할 수 없습니다. 다른 컴퓨터에 있는 SQL Server 인스턴스에서 로그인을 가져오는 경우 이 작업을 완료하려면 사용자 컴퓨터에 있는 SQL Server 인스턴스가 도메인 계정에서 실행되어야 합니다. 참고 DTS 방법을 사용하면 암호를 전송할 수 있지만 원본 SID는 전송할 수 없습니다. 로그인이 원본 SID를 사용하여 만들어지지 않은 경우 사용자 데이터베이스도 새 서버로 전송되면 데이터베이스 사용자가 로그인에서 분리됩니다. 원본 SID를 전송하고 분리된 사용자를 방지하려면 "서로 다른 버전의 SQL Server 간에 로그인 및 암호를 전송하는 방법" 절에 나와 있는 단계를 수행하십시오.
SQL Server 2005 인스턴스 간에 로그인 및 암호를 전송하는 방법
SQL Server 2005 인스턴스 간에 로그인 및 암호를 전송하는 방법에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
918992 (http://support.microsoft.com/kb/918992/) SQL Server 2005 인스턴스 간에 로그인 및 암호를 전송하는 방법
서로 다른 버전의 SQL Server 간에 로그인 및 암호를 전송하는 방법
이 방법은 다음과 같은 경우에 적용됩니다. 참고 다음 단계에 대한 중요한 정보는 이 문서의 끝에 나오는 비고를 참조하십시오.서로 다른 버전의 SQL Server 간에 로그인 및 암호를 전송하려면 다음과 같이 하십시오.
1.

USE masterGOIF OBJECT_ID ('sp_hexadecimal') IS NOT NULL DROP PROCEDURE sp_hexadecimalGOCREATE PROCEDURE sp_hexadecimal @binvalue varbinary(256), @hexvalue varchar (514) OUTPUTASDECLARE @charvalue varchar (514)DECLARE @i intDECLARE @length intDECLARE @hexstring char(16)SELECT @charvalue = '0x'SELECT @i = 1SELECT @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 + 1ENDSELECT @hexvalue = @charvalueGO IF OBJECT_ID ('sp_help_revlogin') IS NOT NULL DROP PROCEDURE sp_help_revloginGOCREATE PROCEDURE sp_help_revlogin @login_name sysname = NULL ASDECLARE @name sysnameDECLARE @type varchar (1)DECLARE @hasaccess intDECLARE @denylogin intDECLARE @is_disabled intDECLARE @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_nameOPEN login_cursFETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @type, @is_disabled, @defaultdb, @hasaccess, @denyloginIF (@@fetch_status = -1)BEGIN PRINT 'No login(s) found.' CLOSE login_curs DEALLOCATE login_curs RETURN -1ENDSET @tmpstr = '/* sp_help_revlogin script 'PRINT @tmpstrSET @tmpstr = '** Generated ' + CONVERT (varchar, GETDATE()) + ' on ' + @@SERVERNAME + ' */'PRINT @tmpstrPRINT ''WHILE (@@fetch_status <> -1)BEGIN IF (@@fetch_status <> -2) BEGIN PRINT '' SET @tmpstr = '-- Login: ' + @name PRINT @tmpstr IF (@type IN ( '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 ENDCLOSE login_cursDEALLOCATE login_cursRETURN 0GO


2.
sp_help_revlogin 저장 프로시저를 만든 다음 원본 서버의 쿼리 분석기에서 sp_help_revlogin 프로시저를 실행합니다. sp_help_revlogin 저장 프로시저는 SQL Server 7.0과 SQL Server 2000에서 모두 사용할 수 있습니다. sp_help_revlogin 저장 프로시저의 출력은 원본 SID와 암호를 사용하여 로그인을 만드는 로그인 스크립트입니다. 출력을 저장한 다음 대상 SQL Server의 쿼리 분석기에 붙여 넣고 실행하십시오. 예를 들면 다음과 같습니다.EXEC master..sp_help_revlogin


참고) http://support.microsoft.com/kb/918992/

댓글 없음:

댓글 쓰기