연결서버을 사용하여 Select 쿼리만 날릴 뿐인데,
DBCC SHOW_STATISTICS 가 실패했다는 에러메시지가 날아와서 당황했다.
에러메시지는 2557, DBCC SHOW_STATISTICS를 실패했다는 메시지.
구글링 결과 아래와 같은 이야기가 나왔다. 기존에 알고 있던 정보와 같이해서 정리한다.
연결서버에 쿼리를 날릴때 MSSQL 서버는 정보 확인을 위해 아래와 같은 SP들을 호출한다.
exec [AdventureWorks].[sys].sp_tables_info_90_rowset N’SalesOrderHeader’,N’Sales’,NULL
exec [AdventureWorks].[sys].sp_columns_100_rowset N’SalesOrderHeader’,N’Sales’,NULL
exec [AdventureWorks].[sys].sp_indexes_100_rowset N’SalesOrderHeader’,NULL,N’Sales’
exec [AdventureWorks].[sys].sp_check_constbytable_rowset N’SalesOrderHeader’,N’Sales’,NULL,NULL
exec [AdventureWorks].[sys].sp_table_statistics2_rowset N’SalesOrderHeader’,N’Sales’,N’AdventureWorks’,NULL,NULL,NULL
이는 연결서버를 사용할때 DML 의 성격과 관계없이 발생한다. 쿼리를 할려면 최소한 메타데이터를 알아야 하는 것이고, 보통 연결서버에 쿼리를 날릴때 조회권한이 있는데 통계정보를 볼 권한이 없다는 건 좀 말이 안된다.
구글링한 블로그에 따르면
db_owner 일때나 sysadmin 정도의 권한이 있어야 제대로 된 조회가 가능하다는 건데
멍청한 짓이 아닐 수 없다.
대부분 보안 문제로 연결서버의 로그인에게는 최소한의 읽기권한만 줄텐데 이때 이렇게 멍청하게 작동할 줄이야.
서비스팩에서 픽스가 된건지는 확인을 해봐야겠다.