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

기술 자료 번역 기술 자료 번역
기술 자료: 246133 - 이 문서가 적용되는 제품 보기.
이 문서는 이전에 다음 ID로 출판되었음: KR246133
모두 확대 | 모두 축소

이 페이지에서

요약

새 서버로 데이터베이스를 이동한 후 사용자가 새 서버에서 로그인하지 못할 수 있으며 다음과 같은 오류 메시지가 나타납니다.
메시지 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 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 SQL Server 2005 인스턴스 간에 로그인 및 암호를 전송하는 방법

서로 다른 버전의 SQL Server 간에 로그인 및 암호를 전송하는 방법

이렇게 하려면 다음 방법 중 하나를 사용하십시오.
참고
  • 다음 방법의 스크립트에서는 sp_hexadecimalsp_help_revlogin이라는 두 가지 저장 프로시저를 master 데이터베이스에 만듭니다.
  • 스크립트는 SQL Server 시스템 테이블에 종속되어 있습니다. 이러한 테이블의 구조는 SQL Server 버전에 따라 변경될 수 있으므로 시스템 테이블에서 직접 선택하지 않는 것이 좋습니다.
  • 방법의 단계에 대한 중요한 정보는 이 문서의 끝에 나오는 비고를 참조하십시오.
  • 방법 2에서는 역할에 로그인을 할당합니다.

방법 1

이 방법은 다음과 같은 경우에 적용됩니다.
  • SQL Server 7.0에서 SQL Server 7.0으로 로그인 및 암호를 전송하는 경우
  • SQL Server 7.0에서 SQL Server 2000으로 로그인 및 암호를 전송하는 경우
  • SQL Server 2000을 실행하는 서버 간에 로그인 및 암호를 전송하는 경우
서로 다른 버전의 SQL Server 간에 로그인 및 암호를 전송하려면 다음과 같이 하십시오.
  1. 원본 SQL Server에서 다음 스크립트를 실행합니다. sp_help_revlogin 저장 프로시저를 만든 후에는 2단계를 계속 수행하십시오.
    ----- Begin Script, Create sp_help_revlogin procedure -----
    
    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(256) OUTPUT
    AS
    DECLARE @charvalue varchar(256)
    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 @xstatus int
    DECLARE @binpwd  varbinary (256)
    DECLARE @txtpwd  sysname
    DECLARE @tmpstr  varchar (256)
    DECLARE @SID_varbinary varbinary(85)
    DECLARE @SID_string varchar(256)
    
    IF (@login_name IS NULL)
      DECLARE login_curs CURSOR FOR 
        SELECT sid, name, xstatus, password FROM master..sysxlogins 
        WHERE srvid IS NULL AND name <> 'sa'
    ELSE
      DECLARE login_curs CURSOR FOR 
        SELECT sid, name, xstatus, password FROM master..sysxlogins 
        WHERE srvid IS NULL AND name = @login_name
    OPEN login_curs 
    FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @xstatus, @binpwd
    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 ''
    PRINT 'DECLARE @pwd sysname'
    WHILE (@@fetch_status <> -1)
    BEGIN 
      IF (@@fetch_status <> -2)
      BEGIN 
        PRINT ''
        SET @tmpstr = '-- Login: ' + @name
        PRINT @tmpstr
        IF (@xstatus & 4) = 4
        BEGIN -- NT authenticated account/group
          IF (@xstatus & 1) = 1
          BEGIN -- NT login is denied access
            SET @tmpstr = 'EXEC master..sp_denylogin ''' + @name + ''''
            PRINT @tmpstr 
          END
          ELSE BEGIN -- NT login has access
            SET @tmpstr = 'EXEC master..sp_grantlogin ''' + @name + ''''
            PRINT @tmpstr 
          END
        END
        ELSE BEGIN -- SQL Server authentication
          IF (@binpwd IS NOT NULL)
          BEGIN -- Non-null password
            EXEC sp_hexadecimal @binpwd, @txtpwd OUT
            IF (@xstatus & 2048) = 2048
              SET @tmpstr = 'SET @pwd = CONVERT (varchar(256), ' + @txtpwd + ')'
            ELSE
              SET @tmpstr = 'SET @pwd = CONVERT (varbinary(256), ' + @txtpwd + ')'
            PRINT @tmpstr
    	EXEC sp_hexadecimal @SID_varbinary,@SID_string OUT
            SET @tmpstr = 'EXEC master..sp_addlogin ''' + @name 
              + ''', @pwd, @sid = ' + @SID_string + ', @encryptopt = '
          END
          ELSE BEGIN 
            -- Null password
    	EXEC sp_hexadecimal @SID_varbinary,@SID_string OUT
            SET @tmpstr = 'EXEC master..sp_addlogin ''' + @name 
              + ''', NULL, @sid = ' + @SID_string + ', @encryptopt = '
          END
          IF (@xstatus & 2048) = 2048
            -- login upgraded from 6.5
            SET @tmpstr = @tmpstr + '''skip_encryption_old''' 
          ELSE
            SET @tmpstr = @tmpstr + '''skip_encryption'''
          PRINT @tmpstr 
        END
      END
      FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @xstatus, @binpwd
      END
    CLOSE login_curs 
    DEALLOCATE login_curs 
    RETURN 0
    GO
     ----- End Script -----
    
    
  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
    

방법 2

이 방법은 다음과 같은 경우에 적용됩니다.
  • SQL Server 7.0에서 SQL Server 2005로 로그인 및 암호를 전송하는 경우
  • SQL Server 2000에서 SQL Server 2005로 로그인 및 암호를 전송하는 경우
  • 역할에 로그인을 할당하는 경우
서로 다른 버전의 SQL Server 간에 로그인 및 암호를 전송한 다음 역할에 로그인을 할당하려면 다음과 같이 하십시오.
  1. 원본 SQL Server에서 다음 스크립트를 실행합니다.
    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(256) OUTPUT 
    AS 
    DECLARE @charvalue varchar(256) 
    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_2000_to_2005') IS NOT NULL 
    DROP PROCEDURE sp_help_revlogin_2000_to_2005 
    GO 
    CREATE PROCEDURE sp_help_revlogin_2000_to_2005 
    
    @login_name sysname = NULL, 
    @include_db bit = 0, 
    @include_role bit = 0 
    
    AS 
    DECLARE @name sysname 
    DECLARE @xstatus int 
    DECLARE @binpwd varbinary (256) 
    DECLARE @dfltdb varchar (256) 
    DECLARE @txtpwd sysname 
    DECLARE @tmpstr varchar (256) 
    DECLARE @SID_varbinary varbinary(85) 
    DECLARE @SID_string varchar(256) 
    
    IF (@login_name IS NULL) 
    DECLARE login_curs CURSOR STATIC FOR 
    SELECT sid, [name], xstatus, password, isnull(db_name(dbid), 'master') 
    FROM master.dbo.sysxlogins 
    WHERE srvid IS NULL AND 
    [name] <> 'sa' 
    ELSE 
    DECLARE login_curs CURSOR FOR 
    SELECT sid, [name], xstatus, password, isnull(db_name(dbid), 'master') 
    FROM master.dbo.sysxlogins 
    WHERE srvid IS NULL AND 
    [name] = @login_name 
    
    OPEN login_curs 
    
    FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @xstatus, @binpwd, @dfltdb 
    
    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 ''
    PRINT ''
    PRINT ''
    PRINT '/***** CREATE LOGINS *****/' 
    
    WHILE @@fetch_status = 0 
    BEGIN
    PRINT ''
    SET @tmpstr = '-- Login: ' + @name
    PRINT @tmpstr 
    
    IF (@xstatus & 4) = 4
    BEGIN -- NT authenticated account/group
    IF (@xstatus & 1) = 1
    BEGIN -- NT login is denied access
    SET @tmpstr = '' --'EXEC master..sp_denylogin ''' + @name + '''' 
    PRINT @tmpstr 
    END
    ELSE
    BEGIN -- NT login has access 
    SET @tmpstr = 'IF NOT EXISTS (SELECT * FROM sys.server_principals WHERE [name] = ''' + @name + ''')' 
    PRINT @tmpstr 
    SET @tmpstr = CHAR(9) + 'CREATE LOGIN [' + @name + '] FROM WINDOWS' 
    PRINT @tmpstr 
    END
    END
    ELSE
    BEGIN -- SQL Server authentication 
    EXEC sp_hexadecimal @SID_varbinary, @SID_string OUT 
    
    IF (@binpwd IS NOT NULL)
    BEGIN -- Non-null password
    EXEC sp_hexadecimal @binpwd, @txtpwd OUT
    SET @tmpstr = 'CREATE LOGIN [' + @name + '] WITH PASSWORD=' + @txtpwd + ' HASHED' 
    END
    ELSE
    BEGIN -- Null password 
    SET @tmpstr = 'CREATE LOGIN [' + @name + '] WITH PASSWORD=''''' 
    END
    
    SET @tmpstr = @tmpstr + ', CHECK_POLICY=OFF, SID=' + @SID_string 
    PRINT @tmpstr 
    END
    
    FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @xstatus, @binpwd, @dfltdb 
    END
    
    IF @include_db = 1 
    BEGIN
    PRINT ''
    PRINT ''
    PRINT ''
    PRINT '/***** SET DEFAULT DATABASES *****/' 
    
    FETCH FIRST FROM login_curs INTO @SID_varbinary, @name, @xstatus, @binpwd, @dfltdb 
    
    WHILE @@fetch_status = 0 
    BEGIN
    PRINT ''
    SET @tmpstr = '-- Login: ' + @name
    PRINT @tmpstr 
    
    SET @tmpstr = 'ALTER LOGIN [' + @name + '] WITH DEFAULT_DATABASE=[' + @dfltdb + ']' 
    PRINT @tmpstr 
    
    FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @xstatus, @binpwd, @dfltdb 
    END
    END
    
    IF @include_role = 1 
    BEGIN
    PRINT ''
    PRINT ''
    PRINT ''
    PRINT '/***** SET SERVER ROLES *****/' 
    
    FETCH FIRST FROM login_curs INTO @SID_varbinary, @name, @xstatus, @binpwd, @dfltdb 
    
    WHILE @@fetch_status = 0 
    BEGIN
    PRINT ''
    SET @tmpstr = '-- Login: ' + @name
    PRINT @tmpstr 
    
    IF @xstatus &16 = 16 -- sysadmin 
    BEGIN
    SET @tmpstr = 'exec master.dbo.sp_addsrvrolemember @loginame=''' + @name + ''', @rolename=''sysadmin''' 
    PRINT @tmpstr 
    END
    
    IF @xstatus &32 = 32 -- securityadmin 
    BEGIN
    SET @tmpstr = 'exec master.dbo.sp_addsrvrolemember @loginame=''' + @name + ''', @rolename=''securityadmin''' 
    PRINT @tmpstr 
    END
    
    IF @xstatus &64 = 64 -- serveradmin 
    BEGIN
    SET @tmpstr = 'exec master.dbo.sp_addsrvrolemember @loginame=''' + @name + ''', @rolename=''serveradmin''' 
    PRINT @tmpstr 
    END
    
    IF @xstatus &128 = 128 -- setupadmin 
    BEGIN
    SET @tmpstr = 'exec master.dbo.sp_addsrvrolemember @loginame=''' + @name + ''', @rolename=''setupadmin''' 
    PRINT @tmpstr 
    END
    
    IF @xstatus &256 = 256 --processadmin 
    BEGIN
    SET @tmpstr = 'exec master.dbo.sp_addsrvrolemember @loginame=''' + @name + ''', @rolename=''processadmin''' 
    PRINT @tmpstr 
    END
    
    IF @xstatus &512 = 512 -- diskadmin 
    BEGIN
    SET @tmpstr = 'exec master.dbo.sp_addsrvrolemember @loginame=''' + @name + ''', @rolename=''diskadmin''' 
    PRINT @tmpstr 
    END
    
    IF @xstatus &1024 = 1024 -- dbcreator 
    BEGIN
    SET @tmpstr = 'exec master.dbo.sp_addsrvrolemember @loginame=''' + @name + ''', @rolename=''dbcreator''' 
    PRINT @tmpstr 
    END
    
    IF @xstatus &4096 = 4096 -- bulkadmin 
    BEGIN
    SET @tmpstr = 'exec master.dbo.sp_addsrvrolemember @loginame=''' + @name + ''', @rolename=''bulkadmin''' 
    PRINT @tmpstr 
    END
    
    FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @xstatus, @binpwd, @dfltdb 
    END
    END
    
    CLOSE login_curs 
    DEALLOCATE login_curs 
    RETURN 0
    GO
    
    exec sp_help_revlogin_2000_to_2005 @login_name=NULL, @include_db=1, @include_role=1
    GO
  2. 출력을 저장한 다음 대상 SQL Server 2005의 SQL Server Management Studio에 붙여 넣고 실행합니다.
참고 원본 SQL Server에 암호가 비어 있는 로그인이 포함되어 있으면 출력에 다음과 유사한 문이 들어 있습니다.
CREATE LOGIN LoginName WITH PASSWORD = '', CHECK_POLICY = OFF, SID = MySID

비고

  • 대상 SQL Server에서 실행하기 전에 출력 스크립트를 신중하게 검토하십시오. 원본 SQL Server 인스턴스와 다른 도메인에 있는 SQL Server 인스턴스로 로그인을 전송해야 하면 sp_help_revlogin 프로시저에서 생성한 스크립트를 편집하여 sp_grantlogin 문에서 도메인 이름을 새 도메인으로 바꾸십시오. 새 도메인에 있는 액세스 권한이 부여된 통합 로그인의 SID가 원본 도메인에 있는 로그인의 SID와 같지 않기 때문에 데이터베이스 사용자가 이러한 로그인에서 분리됩니다. 이러한 분리된 사용자 문제를 해결하려면 다음 단락에 나오는 문서를 참조하십시오. 같은 도메인에 있는 SQL Server 인스턴스 간에 통합 로그인을 전송하면 같은 SID가 사용되므로 사용자가 분리될 가능성이 거의 없습니다.
  • 로그인을 이동한 후 사용자는 이동된 데이터베이스에 액세스할 권한이 없을 수 있습니다. 이 문제를 "분리된 사용자"라고 합니다. 데이터베이스에 로그인 액세스 권한을 부여하려고 하면 사용자가 이미 있다고 나타나면서 실패할 수 있습니다.
    Microsoft SQL-DMO (ODBC SQLState: 42000) 오류 15023: 현재 데이터베이스에 '%s' 사용자 또는 역할이 이미 있습니다.
    데이터베이스 사용자에 로그인을 매핑하여 분리된 SQL Server 로그인과 통합 로그인 문제를 해결하는 방법에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
    240872 SQL Server를 실행하는 서버 사이에서 데이터베이스를 이동할 때 사용 권한 문제를 해결하는 방법
    sp_change_users_login 저장 프로시저를 사용하여 한 번에 하나씩 분리된 사용자 문제를 해결(표준 SQL 로그인에서 분리된 사용자 문제만 해결)하는 방법에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
    274188 PRB: 온라인 설명서의 "분리된 사용자 문제 해결" 항목이 불완전하다
  • 로그인과 암호의 전송이 SQL Server를 실행하는 새 서버로 데이터베이스를 이동하는 작업에 포함되는 경우 관련된 워크플로와 단계에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
    314546 SQL Server를 실행하는 컴퓨터 간에 데이터베이스를 이동하는 방법
  • 암호화된 암호를 사용하여 로그인을 만들 수 있도록 하는 sp_addlogin 시스템 저장 프로시저의 @encryptopt 매개 변수 때문에 로그인과 암호를 전송할 수 있습니다. 이 프로시저에 대한 자세한 내용은 SQL Server 온라인 설명서에서 "sp_addlogin (T-SQL)" 항목을 참조하십시오.
  • 기본적으로 sysadminfixed 서버 역할의 구성원만 sysxlogins 테이블에서 선택할 수 있습니다. sysadmin 역할의 구성원이 필요한 권한을 부여하지 않으면 최종 사용자가 이러한 저장 프로시저를 만들거나 실행할 수 없습니다.
  • 이 방법에서는 기본 데이터베이스가 대상 서버에 없을 수도 있기 때문에 특정 로그인에 대한 기본 데이터베이스 정보를 전송하려고 하지 않습니다. 로그인에 대한 기본 데이터베이스를 정의하려면 로그인 이름과 기본 데이터베이스를 인수로 전달하여 sp_defaultdb 시스템 저장 프로시저를 사용하면 됩니다. 이 프로시저의 사용 방법에 대한 자세한 내용은 SQL Server 온라인 설명서에서 "sp_defaultdb" 항목을 참조하십시오.
  • SQL Server 인스턴스 간에 로그인을 전송하는 동안 원본 서버의 정렬 순서가 대/소문자를 구분하지 않고 대상 서버의 정렬 순서가 대/소문자를 구분하면 대상 서버로 로그인을 전송한 후 암호의 알파벳 문자를 모두 대문자로 입력해야 합니다. 원본 서버의 정렬 순서가 대/소문자를 구분하고 대상 서버의 정렬 순서가 대/소문자를 구분하지 않으면 원본 암호에 알파벳 문자가 포함되어 있지 않은 경우나 원본 암호의 모든 알파벳 문자가 대문자인 경우가 아니면 이 문서에 나와 있는 절차에 따라 전송된 로그인을 사용하여 로그인할 수 없습니다. 두 서버가 모두 대/소문자를 구분하거나 모두 구분하지 않으면 이러한 문제가 발생하지 않습니다. 이것은 SQL Server에서 암호를 처리하는 방식에 따른 부작용입니다. 자세한 내용은 SQL Server 7.0 온라인 설명서에서 "Effect on Passwords of Changing Sort Orders(정렬 순서 변경이 암호에 주는 영향)" 항목을 참조하십시오.
  • 대상 서버에서 sp_help_revlogin 스크립트의 출력을 실행할 때 스크립트 출력에 있는 로그인 중 하나와 이름이 같은 로그인이 서버에 이미 정의되어 있으면 sp_help_revlogin 스크립트의 출력을 실행할 때 다음과 같은 오류가 나타날 수 있습니다.
    서버: 메시지 15025, 수준 16, 상태 1, 프로시저 sp_addlogin, 줄 56
    'test1' 로그인이 이미 있습니다.
    마찬가지로, 추가하려는 로그인과 SID 값이 동일한 다른 로그인이 해당 서버에 있으면 다음과 같은 오류 메시지가 나타납니다.
    서버: 메시지 15433, 수준 16, 상태 1, 프로시저 sp_addlogin, 줄 93
    제공한 매개 변수 @sid가 사용 중입니다.
    따라서 이러한 명령의 출력을 신중하게 검토하고 sysxlogins 테이블의 내용을 조사하여 이러한 오류를 적절하게 해결해야 합니다.
  • 특정 로그인의 SID 값은 SQL Server에서 데이터베이스 수준 액세스를 구현하기 위한 기본 요소로 사용됩니다. 따라서 동일한 로그인에 데이터베이스 수준(해당 서버에 있는 서로 다른 두 데이터베이스)에서 서로 다른 SID 값이 두 개 있으면 이 로그인은 syslogins에 있는 해당 로그인의 SID 값과 일치하는 SID가 있는 데이터베이스에만 액세스할 수 있습니다. 이러한 상황은 두 데이터베이스가 서로 다른 두 서버에서 통합된 경우 발생할 수 있습니다. 이 문제를 해결하려면 sp_dropuser 저장 프로시저를 사용하여 SID가 일치하지 않는 데이터베이스에서 로그인을 수동으로 제거한 다음 sp_adduser 저장 프로시저를 사용하여 다시 추가해야 합니다.




Microsoft 제품 관련 기술 전문가들과 온라인으로 정보를 교환하시려면 Microsoft 뉴스 그룹에 참여하시기 바랍니다.

속성

기술 자료: 246133 - 마지막 검토: 2011년 5월 17일 화요일 - 수정: 9.0
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2000 Personal Edition
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2000 Workgroup Edition
  • Microsoft SQL Server 2000 Developer Edition
  • Microsoft SQL Server 2000 Enterprise Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Workgroup Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
키워드:?
kbsqlmanagementtools kbhowtomaster kbinfo KB246133

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com