(MSSQL) 현재 데이터베이스에 사용자 그룹 또는 역할 이(가) 이미 있습니다

IT/Programming/MSSQL 2015. 6. 25. 17:40

보통 이러한 오류는 MSSQL 에서 데이터베이스 파일(mdf, ldf) 를 연결/복원을 하고, 명령을 실행하려 할 때 발생한다.

 

데이터베이스를 연결/복원한 후, 데이터베이스를 올바르게 구동시키기 위해 기존 데이터베이스에서 사용하던 유저를 생성하여 명령을 실행시켰을 때

 

현재 데이터베이스에 사용자 그룹 또는 역할  <유저 이름> 이(가) 이미 있습니다

 

와 같은 오류가 발생한다. 유저가 이미 있다니? 이게 무슨 말일까?

 

이는 기존의 데이터베이스에 존재하는 유저의 이름과 새로 생성한 유저의 이름은 같지만 서로의 고유 번호인 SID(보안 ID)가 서로 달라서 생기는 문제다. 이름은 같지만 보안 ID가 달라 다른 유저로 인식하는데, 새로 생성한 유저로 명령을 실행하려니 기존에 똑같은 이름의 유저가 존재하여 위와 같은 오류를 발생시키는 것이다.

 

이를 해결하기 위해서는 유저를 매핑하는 프로시저인 sp_change_users_login 프로시저 또는 ALTER USER 명령을 사용하면 된다. 이 명령을 사용하게 되면 기존 데이터베이스 사용자를 SQL Server 로그인에 매핑하게 된다.

 

기존 데이터베이스에 존재하는 유저의 ID가 TestUser, 데이터베이스 세팅을 위해서 새로 생성한 유저의 ID도 TestUser일 경우 쿼리는 다음과 같다.

EXEC sp_change_users_login 'update_one', 'TestUser', 'TestUser'

또는

ALTER USER TestUser WITH LOGIN = TestUser

 

물론, 기존의 데이터베이스가 여러개 존재할 경우, 기존의 각 데이터베이스에 등록된 유저 정보를 모두 매핑해야하므로 각 데이터베이스마다 모두 위의 명령을 한차례씩 실행시켜주어야 한다.

 

MSDN에 따르면, SQL Server 2014 까지는 sp_change_users_login 프로시저가 지원되고 있지만 이 프로시저는 언젠가 삭제될 예정이라고 한다. 이 명령을 사용하고 있는 응용 프로그램이 있다면 위에 기술한 ALTER USER 명령을 사용하는 것을 권고한다.

 

참고 : https://msdn.microsoft.com/ko-kr/library/ms174378(v=sql.120).aspx

 

설정

트랙백

댓글