2013-12-08 34 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

他们或pehaps公共(或其他组)需要对包含的表的函数和引用权限执行权限。不清楚您的帖子中有哪些人。 –

+0

检出http://stackoverflow.com/questions/11473907/permission-to-access-sys-dm-db-index-usage-stats – dav1dsm1th

+0

用户是具有执行权限的角色的成员。授予视图服务器状态将意味着我打破了一些遏制功能,因为我将不得不在每个附加包含数据库的服务器上运行授权。 – Mint

回答

0

我会尝试给予所有者的服务器的权限查看服务器状态这是needed to use that view

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

虽然技术上这会起作用,但会打破数据库的遏制功能。需要在数据库迁移到的每台服务器上运行此脚本。 – Mint

相关问题