개요
구성환경
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 1> ALTER USER viewcomposer WITH LOGIN=viewcomposer |
방법 2) sp_change_login 프로시저를 이용 - 이방법은 SQL Server 2019 이후 버전에서 제거될 예정
syntax)sp_change_users_login 'update_one','현재 데이터베이스 사용자', 'SQL Server 로그인 이름'
1> use viewcomposerDB 1> sp_change_users_login 'update_one','viewcomposer','viewcomposer' |
방법 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. 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> |
'DBMS > MS-SQL' 카테고리의 다른 글
데이터베이스의 트랜잭션 로그 공간 사용량 통계 (0) | 2020.08.27 |
---|---|
[MS-SQL] Always On 생성 Troubleshooting (0) | 2020.02.22 |
[MS-SQL] Always On 가용성 그룹 구성 (3) | 2020.02.19 |
[MS-SQL] 복제 - 트랜잭션 게시 (0) | 2020.02.18 |
[MS-SQL] 복제 - 스냅샷 게시 (0) | 2020.02.18 |