답변:
문제는 복원이 원래 서버 인스턴스에서 db 사용자를 다시 가져 오지만 새 인스턴스는 일반적으로 해당 사용자 로그인을 전혀 모른다는 것입니다. db 수준의 보안 아래에 표시되지만 해당 서버 수준 로그인이 없습니다.
데이터베이스를 복원 한 인스턴스에서 서버 로그인으로 데이터베이스 사용자를 다시 연결해야합니다.
그것에 대해 몇 가지 방법이 있습니다.
새 인스턴스에서 새 로그인을 작성하십시오. 그런 다음 새 인스턴스에서 데이터베이스 사용자로 이들을 제거하고 새 로그인을 추가해야합니다. 동일한 로그인 이름을 만들 수 있지만 SID (보안 식별자)가 다르고 SQL이 사용자 식별에 사용하는 경우가 이상해 보입니다. 한두 번의 로그인으로 충분합니다.
인스턴스간에 동일한 SID를 유지하면서 동일한 사용자를 유지하려면 sp_help_revlogin 저장 프로 시저 를 사용하십시오 . 필요한 저장 프로 시저를 생성 할 링크에서 코드를 복사하고 사용자를 복사하려는 서버에서 실행하십시오. 대상 서버에서 실행할 수있는 SQL 스크립트를 생성하여 SID, 비밀번호 등 모든 것을 전달하는 동일한 사용자를 작성합니다. 대상 인스턴스에서 다시 연결해야하는 데이터베이스 사용자가 많거나 소스 인스턴스에서 하나 이상의 SQL 로그인에 대한 비밀번호를 모르는 경우이 방법을 사용하십시오.
항상 'Update_One'작업과 함께 sp_change_users_login 명령을 실행 하여 서버 사용자와 데이터베이스 사용자를 다시 연결합니다.
sp_change_users_login 'Update_One', 'database user', 'server login
'
SQL Server 2012부터 기존 사용자를 새 로그인에 할당하는 T-SQL 명령이 있습니다. 로그인을 생성하지만 사용자 매핑을 시도하지 마십시오 (실패). 그런 다음 다음을 실행하십시오.
use <existing_database>;
alter user <existing_database_user> with login = <newly_created_login>;
기존 로그인이 새 사용자에게 매핑됩니다. 여기에 SQL 설명서 : https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-user-transact-sql?view=sql-server-2017
EXEC sp_change_users_login 'Auto_Fix', 'User', NULL, 'password';
대신. :)