15023: User already exists in the current database (현재 데이터베이스에 사용자가 이미 존재)
SQL Server의미
데이터베이스에 새 사용자를 추가하는 중 같은 이름의 사용자가 이미 해당 데이터베이스에 존재하는 것으로 확인되었다. 로그인을 기존 사용자에 매핑할 때(orphaned user)도 나타난다.
원인
보통 데이터베이스를 백업에서 다른 서버로 복원하면 로그인 SID가 데이터베이스 사용자와 일치하지 않는다(orphaned user). CREATE USER로 같은 이름을 다시 추가하거나 로그인-사용자 매핑을 수동으로 설정하려 하면 이 오류가 발생한다.
해결 방법
orphaned user를 기존 로그인에 다시 매핑한다: ALTER USER app_user WITH LOGIN = login_name; (legacy sp_change_users_login보다 권장). 사용자가 실제로 불필요하다면: DROP USER app_user; orphan 찾기: SELECT dp.name FROM sys.database_principals dp LEFT JOIN sys.server_principals sp ON dp.sid = sp.sid WHERE sp.sid IS NULL AND dp.type IN ('S','U');
같은 데이터베이스의 다른 항목
- 8114Error converting data type X to Y
- 1204The instance of the SQL Server Database Engine cannot obtain a LOCK resource (SQL Server Database Engine 인스턴스가 LOCK 리소스를 확보할 수 없음)
- 3906Failed to update database because the database is read-only (데이터베이스가 읽기 전용이어서 갱신 실패)
- 18452Login failed. The login is from an untrusted domain and cannot be used with Windows authentication (로그인 실패. 신뢰할 수 없는 도메인의 로그인은 Windows 인증에 사용할 수 없음)
- 605Attempt to fetch logical page belongs to a different allocation unit (가져오려는 논리 페이지가 다른 allocation unit에 속함)
- 4922ALTER TABLE ALTER COLUMN failed because one or more objects access this column (하나 이상의 객체가 이 컬럼에 접근하므로 ALTER TABLE ALTER COLUMN 실패)
- 7202Could not find server 'name' in sys.servers (sys.servers에서 서버를 찾을 수 없음)