Разрешение на доступ к sys.dm_db_index_usage_stats

Поэтому у меня есть веб-сайт для внутреннего пользования, который отслеживает статистику сотрудников. Один из них - пропускают ли они какие-либо отчеты. Поскольку список элементов, в которых еще нет отчетов, обновляется только каждые пару дней, и в этих отчетах предоставляется трехдневный льготный период, я сравниваю дату (releaseDt), когда элемент был зарегистрирован как пропущенный отчет, в последний раз база данных была обновлена (@lastupdate). Таким образом, если база данных отчетов не была обновлена, но отчет завершен, веб-сайт не исключает кого-либо за то, что он пропустил отчет.

Код SQL прекрасно работает с привилегиями администратора, но по понятным причинам я не позволяю учетной записи ASP.NET иметь уровень администратора сервера.

Я настроил учетную запись SQL, которую код ASP.NET C # использует для входа, и разрешения для всего остального в порядке. (Доступ на чтение только для определенных баз данных, которые он использует.) Я не могу понять, к чему дать ему доступ, чтобы иметь доступ для чтения этого конкретного динамического административного представления.

Буду признателен за предложения, используя либо Management Studio, либо с помощьюGRANT Оператор SQL

Похоже, что эта информация имеет отношение к рассматриваемой точке зрения:

sys.dm_db_index_usage_stats (Transact-SQL)

DECLARE @lastupdate datetime
     SELECT @lastupdate = last_user_update from sys.dm_db_index_usage_stats
     WHERE OBJECT_ID = OBJECT_ID('MissingReport')

SELECT 
    COALESCE(Creator, 'Total') AS 'Creator',
    COUNT(*) AS Number, 
    ' + CONVERT(varchar(32), SUM(Cost), 1) AS 'Cost' 
    FROM MissingReport 
    WHERE NOT( 
        [bunch of conditions that make something exempt from needing a report]
        OR
        (
            DATEDIFF(day,ReleaseDt,@lastupdate) <= 3
        )
    )
    GROUP BY Creator WITH ROLLUP
 sylverfyre13 июл. 2012 г., 17:58
Исправил это.
 Aaron Bertrand13 июл. 2012 г., 18:00
Конечно, я не думаю, что код или предыстория также актуальны - вопрос может быть одним или двумя, без потери смысла.
 Aaron Bertrand13 июл. 2012 г., 17:53
Просто для педантичной ясности, этоdynamic management viewнеsystem table.

Ответы на вопрос(1)

Решение Вопроса

SELECT в DMV, поскольку это предотвращается политикой для DMV в области сервера:

GRANT SELECT ON sys.dm_db_index_usage_stats TO peon;

Результаты в:

Msg 4629, Level 16, State 10, Line 1
Permissions on server scoped catalog views or system stored procedures or extended stored procedures can be granted only when the current database is master.

Страница BOL, на которую вы ссылались говорит вам, что вам нужно предоставитьVIEW SERVER STATE, Вы примените это к логину от мастера:

USE master;
GO
GRANT VIEW SERVER STATE TO peon;
-- if it's a Windows login then:
GRANT VIEW SERVER STATE TO [Domain\peon];

Но не существует способа сделать это для каждой базы данных. Не то чтобы вы были этим озабочены, так как даже если кто-то может выяснить, как взломать ваш сервер с учетными данными ASP.NET, все, что он может сделать, этоsee состояние сервера, они не могут ничего изменить.

 sylverfyre13 июл. 2012 г., 18:04
Звучит правильно, пробовал, но мой логин администратора (который имеетsysadmin роль сервера - только что перепроверена - выдает ошибкуGrantor does not have GRANT permission.
 sylverfyre13 июл. 2012 г., 18:44
Работал, когда я использовал основную учетную запись администратора вместо моей личной учетной записи администратора базы данных. По-видимому, хотя мне были предоставлены разрешения на выполнение действий на сервере, у меня не было WITH GRANT для всех из них (кроме созданной db-si). Когда я изучил таблицу, на которую вы указали мне более внимательно, я заметил, что этот.
 13 июл. 2012 г., 18:30
Есть ли флажки вDeny столбец? Есть ли шанс, что вы являетесь участником группы, которой было отказано в этом праве? (Дени всегда побеждает.) Что делаетEffective вкладка говоришь? В любом случае, я действительно не доверяю UI, и это не то место, куда я бы пошел, чтобы проверить эти вещи (даже если это кажется более легким). Однако отслеживаниеwhy что-то там может оказаться немного сложнее, особенно если этоDENY каскадный через членство в группе / роли.
 sylverfyre13 июл. 2012 г., 18:09
Да нетALTER ANY LOGIN  Странно, потому что, когда я смотрю на соответствующее меню в студии управления, у меня естьALTER ANY LOGIN как и все остальныеALTER ANY CREDENTIAL и т.п.
 13 июл. 2012 г., 18:06
@sylverfyre что это дает:SELECT permission_name FROM sys.fn_my_permissions(NULL, N'server'); (Не перечисляйте их в комментарии, но сколько строк есть, и такие важные вещи, какALTER ANY LOGIN отсутствует?)

Ваш ответ на вопрос