SQL Manager Studio에서 다른 SQL 서버에 연결된 서버를 만들었습니다. 내가 만든 연결된 서버의 이름은 "linkedserver"입니다. 연결된 서버는 Microsoft OLE DB 공급자를 사용합니다. 그러나 아래 설명 된 문제는 다른 공급자에게도 발생합니다.직접 연결된 서버 쿼리 openquery를 통한 VS 쿼리
원격 SQL 서버에는 스키마 [스키마]에 [db] 데이터베이스와 [table] 테이블이 있습니다. [table]에는 [column]과 [column2]라는 두 개의 열이 있습니다.
[column]에 대해서만 읽기 권한 만 있고 [column2]에는없는 SQL 사용자 'user'가 원격 SQL 서버에 있습니다. 문제는 아래 예제와 같이 데이터를 쿼리하려고하면 [column2]가 쿼리에 나타나지 않지만 [column2]에서 액세스 권한이 없다는 오류가 발생합니다. 내 주위에 대신 열기 쿼리를 만드는 것입니다 있지만이 편리하지 않습니다.
-- Fetch one column via the linked server - DOES NOT WORK
SELECT TOP 1 [column]
FROM [linkedserver].[db].[schema].[table]
첫 번째 실패 쿼리의 오류 메시지는 다음과 같습니다
Msg 2557, Level 16, State 7, Procedure sp_table_statistics2_rowset, Line 105
User 'user' does not have permission to run DBCC SHOW_STATISTICS for object '[db].[schema].[table]'.
Msg 230, Level 14, State 1, Procedure sp_table_statistics2_rowset, Line 105
The SELECT permission was denied on the column 'column2' of the object 'table', database 'db', schema 'schema'.
OPENQUERY와 해결 방법은 다음과 같습니다
-- Fetch one column via the linked server through an openquery - WORKS
SELECT *
FROM OpenQuery (linkedserver
'SELECT TOP 1 [column]
FROM [db].[schema].[table]')
당신은 이것을 극복하는 방법을 알고, 또는 왜이 이루어집니다 마십시오 ? 내 가정은 첫 번째 쿼리가 [테이블]의 모든 열을 가져오고 SQL Manager Studio에서 필터를 적용하려고한다는 것입니다. 내가 옳은가? 어떻게 든이 문제를 극복 할 수 있습니까?
답장을 보내 주셔서 감사합니다. 속성을 볼 때 원격 서버 버전은 "11.0.6567.0"인 것처럼 보입니다. 아쉽게도 연결된 서버를 만든 SQL 서버에 SQLNCLI10 공급자를 설치할 권한이 없습니다. SQLNCLI11 제공자 만 설치됩니다. 당신의 솔루션은 유망한 것으로 들리지만, 나는 그것을 시도 할 수 있으면 좋겠다. – aragorn
SQL Server 2012 SP3의 테이블에서 단 하나의 열에 대한 권한이있는 사용자와 동일한 상황을 만들면서 오류를 재현하려고 시도했습니다. 2014에서 링크를 만들고 그 자체에서 루프백이 가능하지 않았습니다. 해당 사용자가 대상 2012에서 해당 테이블에 대해 직접 sp_table_statistics2_rowset을 실행해도 오류가 발생하더라도 동일한 오류를 링크 된 서버에서 직접 선택하거나 열기 쿼리를 사용하지 마십시오. 그래서 그것이 문제가 서버 정확한 버전인지 궁금 해서요 그리고 나는 그것을 검색하고 연결 항목을 찾으십시오 : – sepupic
https://connect.microsoft.com/SQLServer/feedback/details/796349/distributed-query-fails-on-tables 부분 액세스와 함께 – sepupic