본문 바로가기

DBMS/MS-SQL

[MS-SQL] "현재 데이터베이스에 사용자, 그룹 또는 역할 이미 있습니다" 오류 해결

반응형

개요

구성환경

SQL Server 2019

 

오류 메시지

분리된 데이터베이스를 다른 SQL Server에 연결할때 발생, 또는 로그인 사용자를 삭제하고 동일 이름으로 생성한 사용자에게 현재 데이터베이스를 연결시 발생

현재 데이터베이스에 사용자, 그룹 또는 역할 'viewcomposer'이(가) 이미 있습니다. (Microsoft SQL Server,Error :15023)

 

원인

위와 같은  문제가 발생하는 이유는 새로 생성한 사용자를 현재 데이터베이스에 매핑할때, 신규 사용자의 이름과 현재 데이터베이스에 저장된 사용자 이름이 동일하기 때문이다.

Windows는 내부적으로는 고유 SID를 이용하여 사용자를 식별한다. 즉, A시스템에 user 이름을 가진 사용자와 B시스템의 user 이름을 가진 사용자는 전혀 다른 사용자가 되는 것이다. 또한 동일한  한 시스템에 기존 사용자를 삭제하고 동일이름으로 생성하여도 SID가 다르기 때문에 서로 다른 사용자로 인식하게 된다.

 

조치

ALTER USER 명령어, sp_change_users_login 프로시저를 이용하여 현재 데이터베이스 사용자를 SQL Server 로그인에 맵핑함으로써 해결 할수 있다. 

방법 1) Alter User 명령어 이용

syntax) ALTER USER 현재 데이터베이스 사용자 WITH LOGIN=SQL Server 로그인 이름

1> use viewcomposerDB
2> go
데이터베이스 컨텍스트가 'viewcomposerDB'(으)로 변경되었습니다.

1> ALTER USER viewcomposer WITH LOGIN=viewcomposer 
2> go 
1>

방법 2) sp_change_login 프로시저를 이용 - 이방법은 SQL Server 2019 이후 버전에서 제거될 예정

syntax)sp_change_users_login 'update_one','현재 데이터베이스 사용자', 'SQL Server 로그인 이름' 

1> use viewcomposerDB 
2> go 
데이터베이스 컨텍스트가 'viewcomposerDB'(으)로 변경되었습니다.

1> sp_change_users_login 'update_one','viewcomposer','viewcomposer' 
2> go 
1>

방법 3) sp_change_users_login 'report' 프로시저에서 확인한 SID를 이용하여 사용자 생성

1> CREATE LOGIN viewcomposer WITH PASSWORD = 'PASSWORD' , SID=0x0DF4552EF6070A4696CD7F9C456DD297 
2> go
1>

 

참고

1. sp_change_users_login 'report' 프로시저는 

현재 데이터베이스에서 어떠한 로그인에도 연결되지 않은 사용자와 해당 SID(보안 식별자)를 나열합니다.

1> use viewcomposerDB
2> go
데이터베이스 컨텍스트가 'viewcomposerDB'(으)로 변경되었습니다.
1> sp_change_users_login 'report'  
2> go
UserName                                                                                                                         UserSID                                                                                                        
-------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
viewcomposer                                                                                                                     0x0DF4552EF6070A4696CD7F9C456DD297                                                                             
1>

2. name, sid 조회 쿼리문

1> use viewcomposerdb 
2> select name, sid from sys.sysusers where name = 'viewcomposer'
3> use master
4> select name, sid from sys.sql_logins where name='viewcomposer'
5> go
데이터베이스 컨텍스트가 'viewcomposerdb'(으)로 변경되었습니다.
name                     sid                                                                                                   
----------------------- --------------------------------------------------------- 
viewcomposer          0x0DF4552EF6070A4696CD7F9C456DD297 

(1 rows affected)
데이터베이스 컨텍스트가 'master'(으)로 변경되었습니다.
name                    sid                                                                                
---------------------- ----------------------------------------------------------
viewcomposer        0x5B3D49A578B28F4890E8AFE29B8E448C                                                                             

(1 rows affected)
1>
반응형