2013-12-11 7 views
2

Мы сохраняем изменения таблиц сервера sql как скрипта в TFS. Когда я получаю скрипт изменения из SMSS, в нижней части скрипта есть строка. Который;В чем смысл конкретной части инструкции SQL?

select 
    Has_Perms_By_Name(N'dbo.MyTableName', 'Object', 'ALTER') as ALT_Per, 
    Has_Perms_By_Name(N'dbo.MyTableName', 'Object', 'VIEW DEFINITION') as View_def_Per, 
    Has_Perms_By_Name(N'dbo.MyTableName', 'Object', 'CONTROL') as Contr_Per 

Какова цель этой строки? Имеет ли значение, если я опустить эту строку из своих файлов сценариев?

+0

связанные: [? Как я могу обнаружить, есть ли я CREATE TABLE разрешения] (http://stackoverflow.com/questions/5748591/how-can-i-detect -whether-i-have-create-table-permission) – bummi

ответ

2

Запрос сообщает о разрешениях текущего пользователя в отношении целевого объекта с использованием встроенной функции HAS_PERMS_BY_NAME.

Это не требуется для контроля версий, поэтому вы можете его опустить.

+0

Хорошо, он сообщает о разрешении пользователя против целевых объектов, но почему он включен в Change Script? – ozdogan

+0

@ozdogan - это может быть связано с вашими сценариями SSMS. Как именно вы генерируете свои скрипты и в какой версии SSMS? –

+0

SMSS -> Инструменты -> Параметры -> Дизайнеры -> Автоматический сгенерированный сценарий изменений – ozdogan

1

Функция Has_Perms_By_Name(...) оценивает разрешение текущего пользователя на таблицу.

синтаксис:

HAS_PERMS_BY_NAME (securable , securable_class , permission 
[ , sub-securable ] [ , sub-securable_class ]) 

тогда

защищаемый: Является ли имя защищаемого. Если защищаемым является сам сервер, это значение должно быть установлено равным NULL. securable - это скалярное выражение типа sysname. По умолчанию нет.

securable_class: Является ли имя класса защиты, на которое проверено разрешение. securable_class - скалярное выражение типа nvarchar (60).

разрешение: нештатное скалярное выражение типа sysname, которое представляет имя разрешения, которое необходимо проверить. По умолчанию нет. Имя разрешения ANY является подстановочным знаком.

sub-securable: необязательное скалярное выражение типа sysname, которое представляет имя защищаемого суб-объекта, на которое проверено разрешение. Значение по умолчанию - NULL.

sub-securable_class: необязательное скалярное выражение типа nvarchar (60), которое представляет класс защищаемой сущности, на которое проверено разрешение. Значение по умолчанию - NULL.

Возвращаемый тип функции - это int и определяет, если текущий пользователь имеет указанные разрешения.

Кроме того, принять на взгляд на этот link

+0

Хорошо, очень хорошо, но почему это связано с скриптами изменений? – ozdogan

Смежные вопросы