SQL Server Management Studio를 통해 호스팅 서버의 데이터베이스에 액세스하려고합니다. 로그인 할 때까지 모든 것이 정상이지만 명령을 사용하면 use myDatabase
이 오류가 발생합니다.
The server principal "****" is not able to access the database "****" under the current security context.
검색 결과 호스팅 서비스 제공 업체가 문제에 대한 이 수정 사항을 나열 했습니다 .
그러나 이것은 아마도 SQL Server Management Studio 2008 용이기 때문에 작동하지 않지만 SQL Server Management Studio 2012를 사용하고 있습니다.
이것이 문제가 될 수 있습니까? 그렇다면 누구든지 SSMS 2012에서 대안을 말할 수 있습니까?
답변
로그인하려는 DB에 사용자가 매핑되어 있는지 확인하십시오.
답변
PROD 환경에서 SSRS에 보고서를 배포하는 동안 동일한 오류가 발생했습니다. 문제는 “사용”문구로 재현 할 수도 있다는 사실을 발견했습니다. 해결책은 사용자의 GUID 계정 참조를 문제의 데이터베이스와 다시 동기화하는 것입니다 (예 : db를 복원 한 후처럼 “sp_change_users_login”사용). 모든 계정을 다시 동기화하는 주식 (커서 기반) 스크립트가 첨부됩니다.
USE <your database>
GO
-------- Reset SQL user account guids ---------------------
DECLARE @UserName nvarchar(255)
DECLARE orphanuser_cur cursor for
SELECT UserName = su.name
FROM sysusers su
JOIN sys.server_principals sp ON sp.name = su.name
WHERE issqluser = 1 AND
(su.sid IS NOT NULL AND su.sid <> 0x0) AND
suser_sname(su.sid) is null
ORDER BY su.name
OPEN orphanuser_cur
FETCH NEXT FROM orphanuser_cur INTO @UserName
WHILE (@@fetch_status = 0)
BEGIN
--PRINT @UserName + ' user name being resynced'
exec sp_change_users_login 'Update_one', @UserName, @UserName
FETCH NEXT FROM orphanuser_cur INTO @UserName
END
CLOSE orphanuser_cur
DEALLOCATE orphanuser_cur
답변
나는이 문제와 씨름하는 데 꽤 오랜 시간을 보냈고, 내가 내 연결을 목표로 삼고있는 특정 데이터베이스를 잊었다는 사실에 간단한 실수를하고 있다는 것을 깨달았다. 표준 SQL Server 연결 창을 사용하여 자격 증명을 입력했습니다.
나는 확인했다 연결 속성 I 연결할 올바른 데이터베이스를 선택되었는지 확인하는 탭을 선택합니다. 실수 로 데이터베이스에 연결 옵션을 이전 세션의 선택 항목으로 설정했습니다. 이것이 제가 연결 하려고 했던 데이터베이스에 연결할 수없는 이유 입니다.
연결 속성 및 기타 탭을 표시 하려면 Options >>
단추 를 클릭해야 합니다.
답변
이것은 나를 위해 일했습니다.
use <Database>
EXEC sp_change_users_login @Action='update_one', @UserNamePattern='<userLogin>',@LoginName='<userLogin>';
문제는 다음과 같이 시각화 할 수 있습니다.
SELECT sid FROM sys.sysusers WHERE name = '<userLogin>'
SELECT sid FROM sys.syslogins WHERE name = '<userLogin>';
답변
SQL 로그인 은 서버 수준에서 정의되며 특정 데이터베이스의 사용자 에 매핑되어야 합니다.
SSMS 개체 탐색기에서 수정하려는 서버 아래에서 보안 > 로그인을 확장 한 다음 적절한 사용자를 두 번 클릭하면 “로그인 속성”대화 상자가 나타납니다.
사용자 매핑을 선택 하면 기존 매핑이 선택된 데이터베이스와 함께 서버의 모든 데이터베이스가 표시됩니다. 여기에서 추가 데이터베이스를 선택한 다음 (사용자가 속해야하는 각 데이터베이스의 역할을 선택해야 함) 확인 을 클릭 하여 매핑을 추가 할 수 있습니다.
이러한 매핑은 복원 또는 유사한 작업 후에 연결이 끊어 질 수 있습니다. 이 경우 사용자는 데이터베이스에 여전히 존재할 수 있지만 실제로 로그인에 매핑되지는 않습니다. 이 경우 다음을 실행하여 로그인을 복원 할 수 있습니다.
USE {database};
ALTER USER {user} WITH login = {login}
DB 사용자를 삭제하고 로그인 속성 대화 상자에서 다시 만들 수도 있지만 모든 역할 멤버 자격 또는 기타 설정을 다시 만들어야합니다.
답변
필자의 경우 메시지는 “개체 이름”에 데이터베이스 이름이 실수로 포함 된 동의어로 인해 발생했습니다. 새 이름으로 데이터베이스를 복원 할 때 동의어는 여전히 이전 DB 이름을 가리 킵니다. 사용자는 이전 DB에 대한 권한이 없기 때문에 메시지가 나타납니다. 수정하기 위해 데이터베이스 이름으로 개체 이름을 한정하지 않고 동의어를 삭제하고 다시 만들었습니다.
USE [new_db]
GO
/****** Object: Synonym [dbo].[synTable] Script Date: 10/15/2015 9:45:01 AM ******/
DROP SYNONYM [dbo].[synTable]
GO
/****** Object: Synonym [dbo].[synTable] Script Date: 10/15/2015 9:45:01 AM ******/
CREATE SYNONYM [dbo].[synTable] FOR [dbo].[tTheRealTable]
GO