SQL Server 2008 R2 오류 : 15023, 사용자, 그룹 또는 역할이 이미 존재합니다


16

권한 문제가있는 테스트 데이터베이스가 있습니다.
보고 데이터베이스에 액세스 할 수 없으며 응용 프로그램의 도움말 설명서에서 다음을 수행하도록 지시합니다.

Resolution: 

1. Launch the SQL Server Management Studio and connect to the database server(s) hosting   the Vision and Reporting Server databases. 
2. Expand the security folder. 
3. Select logins and right click on the <username> user and choose properties. 
4. Click the User Mapping tab 
5.Make sure the following databases are selected in the Users mapped to this Login:

    ReportServer
    ReportServerTempDB
    Your Vision databases
    This maps the login/user to the respective databases.
6. As you select each database (including your Vision database), select the db_owner role in the Database role membership for: section. You must select this option for each database.

이 작업을 수행하면 다음 오류가 발생합니다.

"Create failed for user '<servername>\<username>'.  User, group, or role '<servername>\<username>' already exists in the current database. (Microsoft SQL Server, Error: 15023)"

이 오류를 봤으며 각 데이터베이스에서 다음 명령을 시도했습니다.

 ALTER USER [<username>] WITH LOGIN = [<username>] 

메시지는 명령이 성공적으로 완료되었음을 나타내지 만 위의 지침에 따라 각 데이터베이스를 매핑하려고 할 때 여전히 위의 오류가 발생합니다.

내가 무엇을 놓치고 있습니까?

Per Kin의 의견 (감사합니다) 나는 이것을 시도했다. -결과 쿼리를 실행하고 다른 두 데이터베이스와 db_owner를 다시 선택하여 사용자 역할을 매핑하려고 시도했지만 여전히 위와 동일한 오류 메시지가 나타납니다.

생각 ??

답변:


12

시도 할 수있는 여러 가지가 있으며, 각각의 성공 여부는 사용중인 서버 역할에 따라 다릅니다.

우선, 한두 명의 사용자 인 경우, 가장 쉬운 방법은 복원 된 데이터베이스에서 데이터베이스 사용자를 삭제하고 기존 서버 로그인이 이미있는 경우 SSMS를 사용하여 데이터베이스 사용자를 서버 로그인에 다시 맵핑하는 것입니다. 서버 로그인이 존재하지 않으면 생성하고 사용자를 매핑 한 다음 presto! 우리는 멀리 간다.

다음 옵션 : 많은 수의 사용자를 마이그레이션하는 경우 sp_help_revlogin을 사용하십시오. sp_help_revlogin은 암호 및 SID를 포함하여 한 서버에서 다른 서버로 로그인을 마이그레이션하는 데 도움이되는 Microsoft 제공 저장 프로 시저입니다. 여기 SP_HELP_REVLOGIN 에 대한 좋은 기사가 있습니다 .


support.microsoft.com/en-us/kb/918992를 참조하십시오 . SQL Server 인스턴스간에 로그인과 암호를 전송하는 방법
James Jenkins

3

개발자 환경에서 Auto_Fix 를 사용 sp_change_users_login하여 이러한 문제를 해결합니다 (오류 15023). 보안에 민감한 상황에서는 Auto_Fix를 사용하지 마십시오.

Auto_Fix : 현재 데이터베이스의 sys.database_principals 시스템 카탈로그 뷰의 사용자 항목을 동일한 이름의 SQL Server 로그인에 연결합니다. 같은 이름의 로그인이 존재하지 않으면 로그인이 생성됩니다. Auto_Fix 문의 결과를 검사하여 올바른 링크가 실제로 작성되었는지 확인하십시오. 보안에 민감한 상황에서는 Auto_Fix를 사용하지 마십시오.

sp_change_users_login 'AUTO_FIX', 'myuser'

또한이 기능은 이후 버전의 Microsoft SQL Server에서 제거 될 수 있습니다.

다른 참고 문헌 :

  1. SQL Server 2008 사용자, 그룹 또는 역할이 현재 데이터베이스에 이미 존재합니다
  2. FIX : 오류 15023 : 사용자가 현재 데이터베이스에 이미 존재 함
  3. SQL은 로그인을 기존 사용자에게 매핑

0
ALTER USER [<username>] WITH LOGIN=[<username>]

올바른 접근 방식입니다.

그렇지 않으면 다음으로 이동하십시오.

보안> 로그인> (사용자 이름)> 속성> 사용자 매핑

여기에 이미지 설명을 입력하십시오

해당 사용자를 원하는 데이터베이스에 다시 매핑하십시오.

데이터베이스 컨텍스트에서 다음 쿼리를 사용하여 고아를 확인할 수 있습니다.

select
    dp.name [user_name]
    ,dp.type_desc [user_type]
    ,isnull(sp.name,'Orhphaned!') [login_name]
    ,sp.type_desc [login_type]
from   
    sys.database_principals dp
    left join sys.server_principals sp on (dp.sid = sp.sid)
where
    dp.type in ('S','U','G')
    and dp.principal_id >4
order by sp.name

-4

마스터 데이터베이스로 이동하여 사용자를 삭제하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.