Таким образом, чтобы добавить расширенные свойства к объекту, вам необходимо либо владеть объектом, либо иметь привилегию CONTROL или ALTER для объекта.
Таким образом, вы не можете на самом деле ограничить пользователя со встроенными разрешениями простым добавлением расширенных свойств, поскольку для добавления расширенного свойства в базу данных вам придется предоставить владельцу, контролю или изменению на этом уровне пользователю.
Что вы можете сделать, так это создать свою собственную хранимую процедуру для выполнения системной хранимой процедуры с теми же параметрами и настроить ее на выполнение от имени владельца, а затем просто предоставить выполнение этой процедуры пользователю. Таким образом, они ничего не могут сделать в базе данных, кроме запуска процедуры, которая просто добавляет расширенные свойства.
Я проверил следующее, и это работает:
CREATE PROCEDURE add_property
(
@name NVARCHAR(128) = NULL,
@value NVARCHAR(128) = NULL,
@level0type NVARCHAR(128) = NULL,
@level0name NVARCHAR(128) = NULL,
@level1type NVARCHAR(128) = NULL,
@level1name NVARCHAR(128) = NULL,
@level2type NVARCHAR(128) = NULL,
@level2name NVARCHAR(128) = NULL
)
WITH EXECUTE AS OWNER
AS
EXEC sp_addextendedproperty
@name,
@value,
@level0type,
@level0name,
@level1type,
@level1name,
@level2type,
@level2name;
30.01.2014