특정 데이터베이스에만 액세스할 수 있고 다른 데이터베이스를 읽거나 변경할 수 없으며 다른 계정의 자격 증명을 변경할 수 없는 DB 사용자 계정을 만들려고 합니다.
연결 문제를 해결하는 동안 실수로 "공용" 서버 역할에서 이 사용자를 제거했습니다. 이로 인해 해당 계정에 대해 Management Studio에서 서버에 액세스할 수 없게 되었습니다.
액세스 권한을 얻는 유일한 방법은 사용자를 sysadmin 역할에 추가하는 것입니다. 이제 사용자가 모든 데이터베이스에 액세스할 수 있으므로 이 방법은 작동하지 않습니다.
이제 사용자를 공용 서버 역할에 다시 추가하려고 하면 해당 역할의 멤버십을 변경할 수 없다는 오류가 발생합니다.
흥미롭게도 사용자를 마우스 오른쪽 버튼으로 클릭하고 속성을 보면 사용자가 공용 역할의 구성원이라고 주장하며 구성원을 변경할 수 없습니다.
질문:
- 그렇다면 공개 역할 멤버십을 변경할 수 없다면 처음에 역할에서 사용자를 어떻게 제거할 수 있었습니까?
- 해당 사용자가 Management Studio에 다시 액세스할 수 있도록 사용자를 다시 추가하려면 어떻게 해야 합니까?
답변1
추가 세부정보를 돕기 위해 모든 부분이 올바르지 않은 부분을 정확하게 말할 수 있도록 모든 모양이 어떻게 표시되어야 하는지 알려드립니다. 서버에 대한 로그인이 있고 문제가 있는 계정에 대한 데이터베이스 사용자가 있습니다. 서버 및 데이터베이스 수준에는 공용 역할(서버 역할 및 데이터베이스 역할)이 표시됩니다. 공용 서버 역할의 속성에는 사용자가 표시되지 않지만 로그인 속성에는 모든 데이터베이스에 대한 공용 데이터베이스 역할이 표시됩니다(선택되어 있으며 선택을 취소할 수 없음). 공용 데이터베이스 역할의 속성에는 멤버도 표시되지 않으며 데이터베이스 사용자의 속성에도 공용 역할이 표시되지 않습니다. 이 모든 이유로 공개 역할에서 사용자를 제거했다고는 생각하지 않습니다.
사용자를 삭제하고 다시 생성하려면 먼저 데이터베이스로 이동하여 데이터베이스 사용자를 삭제하면 됩니다. 이렇게 하면 로그인이 유지되며 속성으로 이동할 수 있으며 사용자 매핑 아래에는 데이터베이스가 확인되어 있지 않아야 합니다. 이제 데이터베이스를 확인하고(데이터베이스 사용자가 삭제되었으므로) 필요한 역할을 선택할 수 있습니다. 그래도 문제가 해결되지 않으면 데이터베이스 사용자와 함께 로그인을 삭제하여 모든 것을 지울 수도 있습니다. 사용자에 대한 마지막 확인을 위해 다음 SQL을 실행할 수 있습니다.
use database_name
exec sp_change_users_login 'Report'
이렇게 하면 분리된 사용자가 표시되며, 이는 사용자에게 여전히 문제가 있음을 의미할 수 있습니다. 이 문제는 일반적으로 다음을 통해 해결할 수 있습니다.
use database_name
exec sp_change_users_login 'Auto_Fix', 'username'
더 길어지기 전에 이 문제를 마무리하려면 이 사용자의 연결 문제를 일으키는 다른 원인이 있을 수 있습니다. 이 방법이 모두 작동하지 않으면 로그인할 때 나타나는 오류 메시지를 게시해 주실 수 있나요?