GRANT, предоставление разрешений на объект (Transact-SQL)
Предоставляет разрешения на таблицу, представление, функцию с табличным значением, хранимую процедуру, расширенную хранимую процедуру, скалярную функцию, агрегатную функцию, очередь обслуживания или синоним.
Соглашения о синтаксисе в Transact-SQL
Синтаксис
GRANT <permission> [ ,...n ] ON
[ OBJECT :: ][ schema_name ]. object_name [ ( column [ ,...n ] ) ]
TO <database_principal> [ ,...n ]
[ WITH GRANT OPTION ]
[ AS <database_principal> ]
<permission> ::=
ALL [ PRIVILEGES ] | permission [ ( column [ ,...n ] ) ]
<database_principal> ::=
Database_user
| Database_role
| Application_role
| Database_user_mapped_to_Windows_User
| Database_user_mapped_to_Windows_Group
| Database_user_mapped_to_certificate
| Database_user_mapped_to_asymmetric_key
| Database_user_with_no_login
Аргументы
permission
Указывает разрешение, которое может быть предоставлено на содержащийся в схеме объект. Список разрешений см. в подразделе «Примечания» далее в этом разделе.ALL
Предоставление ALL не включает все возможные разрешения, оно эквивалентно предоставлению всех разрешений ANSI-92, применимых к указанному объекту. Значение ALL различается для разных типов объектовРазрешения на скалярные функции: EXECUTE, REFERENCES.
Разрешения на функции с табличным значением: DELETE, INSERT, REFERENCES, SELECT, UPDATE.
Разрешения на хранимые процедуры: EXECUTE.
Разрешения на таблицы: DELETE, INSERT, REFERENCES, SELECT, UPDATE.
Разрешения на представления: DELETE, INSERT, REFERENCES, SELECT, UPDATE.
PRIVILEGES
Включено для обеспечения совместимости с ANSI-92. Не изменяет поведение аргумента ALL.column
Указывает имя столбца в таблице, представление или функции с табличным значением, на которых предоставляется разрешение. Указание круглых скобок ( ) обязательно. На столбец могут быть предоставлены только разрешения SELECT, REFERENCES и UPDATE. Аргумент column может быть указан в предложении PERMISSIONS или после имени защищаемого объекта.Внимание! Запрет (DENY) на уровне таблицы имеет меньший приоритет, чем предоставление разрешения (GRANT) на уровне столбца. Такая несогласованность в иерархии разрешений сохранена в целях обратной совместимости.
ON [ OBJECT :: ] [ schema_name ] . object_name
Указывает объект, на который предоставляется разрешение. Фраза OBJECT необязательна, если указан аргумент schema_name. Если же она указана, указание квалификатора области (::) обязательно. Если не указан аргумент schema_name, подразумевается схема по умолчанию. Если указан аргумент schema_name, обязательно указание квалификатора области схемы (.).TO <database_principal>
Указывает участника, которому предоставляется разрешение.WITH GRANT OPTION
Указывает, что участнику также дается возможность предоставлять указанное разрешение другим участникам.AS <database_principal>
Определяет участника, у которого другой участник, выполняющий данный запрос, наследует право предоставлять данное разрешение.Database_user
Указывает пользователя базы данных.Database_role
Указывает роль базы данных.Application_role
Указывает роль приложения.Database_user_mapped_to_Windows_User
Указывает пользователя базы данных, сопоставленного с пользователем Windows.Database_user_mapped_to_Windows_Group
Указывает пользователя базы данных, сопоставленного с группой Windows.Database_user_mapped_to_certificate
Указывает пользователя базы данных, сопоставленного с сертификатом.Database_user_mapped_to_asymmetric_key
Указывает пользователя базы данных, сопоставленного с асимметричным ключом.Database_user_with_no_login
Указывает пользователя базы данных без соответствующего участника на уровне сервера.
Замечания
Важно! |
---|
Сочетание разрешений ALTER и REFERENCE в некоторых случаях может позволить просматривать данные или выполнять несанкционированные функции. Например, Пользователь с разрешением ALTER на таблицу и разрешением REFERENCE на функцию может создавать вычисляемый столбец на основе функции и в результате — выполнять ее. В этом случае пользователю также требуется разрешение SELECT на вычисляемый столбец. |
Сведения об объектах доступны через различные представления каталога. Дополнительные сведения см. в разделе Представления каталога объектов (Transact-SQL).
Объект является защищаемым на уровне схемы. Он содержится в схеме, которая является его родителем в иерархии разрешений. В следующей таблице перечислен ряд отдельных разрешений, которые могут быть предоставлены на объект, а также наиболее общие разрешения, которые неявно их подразумевают.
Разрешение объекта |
Содержится в разрешении объекта |
Содержится в разрешении схемы |
---|---|---|
ALTER |
CONTROL |
ALTER |
CONTROL |
CONTROL |
CONTROL |
DELETE |
CONTROL |
DELETE |
EXECUTE |
CONTROL |
EXECUTE |
INSERT |
CONTROL |
INSERT |
RECEIVE |
CONTROL |
CONTROL |
REFERENCES |
CONTROL |
REFERENCES |
SELECT |
RECEIVE |
SELECT |
TAKE OWNERSHIP |
CONTROL |
CONTROL |
UPDATE |
CONTROL |
UPDATE |
VIEW CHANGE TRACKING |
CONTROL |
VIEW CHANGE TRACKING |
VIEW DEFINITION |
CONTROL |
VIEW DEFINITION |
Разрешения
Объект, предоставляющий разрешение (или участник, указанный аргументом AS), должен иметь либо само разрешение, выданное с помощью GRANT OPTION, либо разрешение более высокого уровня, которое неявно включает предоставляемое разрешение.
При использовании параметра AS налагаются следующие дополнительные требования.
AS |
Необходимо дополнительное разрешение |
---|---|
Пользователь базы данных |
Разрешение IMPERSONATE для пользователя, членство в предопределенной роли базы данных db_securityadmin или db_owner либо в предопределенной роли сервера sysadmin. |
Пользователь базы данных, сопоставленный имени входа Windows |
Разрешение IMPERSONATE для пользователя, членство в предопределенной роли базы данных db_securityadmin или db_owner либо в предопределенной роли сервера sysadmin. |
Пользователь базы данных, сопоставленный группе Windows |
Членство в группе Windows, членство в предопределенной роли базы данных db_securityadmin, членство в предопределенной роли базы данных db_owner или членство в предопределенной роли сервера sysadmin. |
Пользователь базы данных, сопоставленный сертификату |
Членство в предопределенной роли базы данных db_securityadmin, членство в предопределенной роли базы данных db_owner или членство в предопределенной роли сервера sysadmin. |
Пользователь базы данных, сопоставленный асимметричному ключу |
Членство в предопределенной роли базы данных db_securityadmin, членство в предопределенной роли базы данных db_owner или членство в предопределенной роли сервера sysadmin. |
Пользователь базы данных, не сопоставленный ни с одним участником на уровне сервера |
Разрешение IMPERSONATE для пользователя, членство в предопределенной роли базы данных db_securityadmin или db_owner либо в предопределенной роли сервера sysadmin. |
Роль базы данных |
Разрешение ALTER для роли, членство в предопределенной роли базы данных db_securityadmin, членство в предопределенной роли базы данных db_owner или членство в предопределенной роли сервера sysadmin. |
Роль приложения |
Разрешение ALTER для роли, членство в предопределенной роли базы данных db_securityadmin, членство в предопределенной роли базы данных db_owner или членство в предопределенной роли сервера sysadmin. |
Примеры
А.Предоставление разрешения SELECT на таблицу
В следующем примере предоставляется разрешение SELECT пользователю RosaQdM на таблицу Person.Address в базе данных AdventureWorks2012.
USE AdventureWorks2012;
GRANT SELECT ON OBJECT::Person.Address TO RosaQdM;
GO
Б.Предоставление разрешения EXECUTE на хранимую процедуру
В следующем примере предоставляется разрешение EXECUTE на хранимую процедуру HumanResources.uspUpdateEmployeeHireInfo роли приложения Recruiting11.
USE AdventureWorks2012;
GRANT EXECUTE ON OBJECT::HumanResources.uspUpdateEmployeeHireInfo
TO Recruiting11;
GO
В.Предоставление разрешения REFERENCES на представление с параметром GRANT OPTION
В следующем примере предоставляется разрешение REFERENCES на столбец BusinessEntityID в представлении HumanResources.vEmployee пользователю Wanida с параметром GRANT OPTION.
USE AdventureWorks2012;
GRANT REFERENCES (BusinessEntityID) ON OBJECT::HumanResources.vEmployee
TO Wanida WITH GRANT OPTION;
GO
Г.Предоставление разрешения SELECT на таблицу без использования фразы OBJECT
В следующем примере предоставляется разрешение SELECT пользователю RosaQdM на таблицу Person.Address в базе данных AdventureWorks2012.
USE AdventureWorks2012;
GRANT SELECT ON Person.Address TO RosaQdM;
GO
Д.Предоставление учетной записи домена разрешения SELECT на таблицу
В следующем примере предоставляется разрешение SELECT пользователю AdventureWorks2012\RosaQdM на таблицу Person.Address в базе данных AdventureWorks2012.
USE AdventureWorks2012;
GRANT SELECT ON Person.Address TO [AdventureWorks2012\RosaQdM];
GO
Е.Предоставление роли разрешения EXECUTE на процедуру
В следующем примере создается роль, а затем ей предоставляется разрешение EXECUTE на процедуру uspGetBillOfMaterials в базе данных AdventureWorks2012.
USE AdventureWorks2012;
CREATE ROLE newrole ;
GRANT EXECUTE ON dbo.uspGetBillOfMaterials TO newrole ;
GO
См. также
Справочник
DENY, запрет разрешений на объект (Transact-SQL)
REVOKE, отмена разрешения (Transact-SQL)
Представления каталога объектов (Transact-SQL)
sys.fn_builtin_permissions (Transact-SQL)
HAS_PERMS_BY_NAME (Transact-SQL)
sys.fn_my_permissions (Transact-SQL)
Основные понятия
Разрешения (компонент Database Engine)