2013-12-08 2 views
0

포함 된 데이터베이스에서이 테이블에 대한 읽기 권한을 사용자에게 부여하는 방법은 무엇입니까?SQL Server 2012 - 포함 된 데이터베이스의 sys.dm_db_index_usage_stats에 대한 액세스 권한

테이블이 마지막으로 업데이트 된 날짜를 가져 오는 기능을 만들려고하지만 포함 된 사용자가이를 실행하면 오류 297 '사용자에게이 작업을 수행 할 수있는 권한이 없습니다.'와 함께 실패합니다.

CREATE FUNCTION [MGMT].[GetLastObjectUpdateTime] (@ObjectName NVARCHAR(100)) 
RETURNS DATETIME 
WITH EXECUTE AS OWNER 
AS 
BEGIN 
     DECLARE @Result DATETIME 

     SELECT @result = MAX(last_user_update) 
     FROM sys.dm_db_index_usage_stats 
     WHERE OBJECT_ID = OBJECT_ID(@ObjectName) 

     RETURN @Result 
END 

(의 코드 : http://blog.sqlauthority.com/2009/05/09/sql-server-find-last-date-time-updated-for-any-table/#comment-684267)

+0

peple public (또는 다른 그룹)에는 함수에 대한 실행 권한이 필요하며 포함 된 테이블에 대한 사용 권한을 참조해야합니다. 누가 당신의 게시물에서 무엇을 가지고 있는지 분명하지 않습니다. –

+0

체크 아웃 http://stackoverflow.com/questions/11473907/permission-to-access-sys-dm-db-index-usage-stats – dav1dsm1th

+0

사용자는 실행 권한이있는 역할의 멤버입니다. 뷰 서버 상태를 부여하려면 포함 된 db를 첨부 한 각 서버에서 grant를 실행해야하므로 containment 기능 중 일부가 손상되었다는 것을 의미합니다. – Mint

답변

0

나는 주인에게 needed to use that view있는 서버 권한보기의 서버 상태를 부여하려고 할 것이다.

USE master; 
GO 
GRANT VIEW SERVER STATE TO [owner login] 
GO 
+0

기술적으로는 작동하지만 데이터베이스의 포함 기능이 손상 될 수 있습니다. 데이터베이스가 마이그레이션되는 모든 서버에서이 스크립트를 실행해야합니다. – Mint

관련 문제