Не удается предоставить разрешение CHANGE TRACKING на уровне базы данных.

У нас включено отслеживание изменений на нашем SQL Server. Таблицы, для которых включено отслеживание изменений, охватывают несколько схем. Мы можем успешно выполнить следующее, чтобы предоставить VIEW CHANGE TRACKING для класса схемы, но мы хотели бы предоставить это разрешение на уровне базы данных, чтобы охватить все схемы. При попытке предоставления на уровне класса базы данных возвращается следующая ошибка. Я запускаю команду в контексте тестовой базы данных. Я не могу найти никакой документации, которая указывала бы на то, что это конкретное разрешение не может быть предоставлено на этом уровне.

Incorrect syntax near 'VIEW CHANGE TRACKING'.

-- Granting on schema class works
GRANT VIEW CHANGE TRACKING ON SCHEMA::dbo TO TestUser

-- Granting on database class fails
GRANT VIEW CHANGE TRACKING ON DATABASE::Test TO TestUser

person Geekn    schedule 27.08.2020    source источник
comment
Если я не ошибаюсь, вы не можете применить его на уровне базы данных. Вам нужно будет применить его к каждой схеме/объекту индивидуально. Если вы хотите использовать его во всей базе данных, вам придется использовать динамический скрипт.   -  person Larnu    schedule 27.08.2020


Ответы (1)


Вот сценарий для создания гранта для всех схем, содержащих таблицу с отслеживанием изменений:

select distinct 'grant view change tracking on schema::' +quotename(schema_name(schema_id))+ ' to testuser;'
from sys.tables t
join sys.change_tracking_tables ct
  on t.object_id = ct.object_id
person David Browne - Microsoft    schedule 27.08.2020