Разрешения, необходимые для запуска SQL Server Data Tools. Разрешение sql


Разрешения, необходимые для запуска SQL Server Data Tools

 

Чтобы иметь возможность выполнять действия с базами данных в Visual Studio, необходимо выполнить вход в систему под учетной записью, обладающей определенными разрешениями на эту базу данных. Требуемые разрешения зависят от того, какое действие требуется выполнить. В следующих разделах описываются все действия, которые вам может потребоваться выполнить, и соответствующие разрешения, которые нужны для их выполнения.

Для создания или развертывания базы данных необходимо иметь следующие разрешения.

ДействияНеобходимые разрешения
Импорт объектов и параметров базы данныхНеобходимо иметь возможность подключаться к базе данных-источнику.

Если база данных-источник основана на SQL Server 2005, вам также необходимо иметь разрешение VIEW DEFINITION для каждого объекта.

Если база данных-источник основана на SQL Server 2008 или более поздней версии, вам также необходимо иметь разрешение VIEW DEFINITION для каждого объекта. Ваше имя для входа должно иметь разрешение VIEW SERVER STATE (для ключей шифрования базы данных).

Импорт объектов и параметров сервераНеобходимо иметь возможность подключаться к базе данных master на указанном сервере.

Если сервер работает под управлением SQL Server 2005, у вас должно быть разрешение VIEW ANY DEFINITION на этот сервер.

Если база данных-источник основана на SQL Server 2008 или более поздней версии, вам также необходимо иметь разрешение VIEW ANY DEFINITION на этот сервер. Ваше имя для входа должно иметь разрешение VIEW SERVER STATE (для ключей шифрования базы данных).

Создание или обновление проекта базы данныхДля создания или изменения проекта базы данных не требуется каких-либо разрешений на базу данных.
Развертывание новой базы данных или развертывание с заданным параметром Всегда создавать базу данных повторноВам нужно либо иметь разрешение CREATE DATABASE, либо быть членом роли dbcreator на целевом сервере.

При создании базы данных Visual Studio подключается к шаблону базы данных и копирует его содержимое. Первоначальное имя для входа (например, yourLogin), которое используется для подключения к целевой базе данных, должно иметь разрешения db_creator и CONNECT SQL. Это имя входа должно иметь сопоставление пользователя с шаблоном базы данных. При наличии разрешений sysadmin это сопоставление можно создать с помощью следующих инструкций Transact-SQL.

USE [model] CREATE USER yourUser FROM LOGIN yourLogin

Пользователь (в примере это yourUser) должен иметь разрешения CONNECT и VIEW DEFINITION на шаблон базы данных. При наличии разрешений sysadmin эти разрешения можно предоставить с помощью следующих инструкций Transact-SQL.

USE [model] GRANT CONNECT to yourUser GRANT VIEW DEFINITION TO yourUser

При развертывании базы данных, содержащей безымянные ограничения, когда параметр CheckNewContraints включен (а он включен по умолчанию), необходимо иметь разрешения db_owner или sysadmin. В противном случае развертывание завершится ошибкой. Это верно только для безымянных разрешений. Дополнительные сведения о параметре CheckNewConstraints см. в разделе Параметры проекта базы данных.

Развертывание обновлений в существующую базу данныхВы должны быть допустимым пользователем базы данных. Вам также нужно быть членом роли db_ddladmin, владеть схемой или объектами, которые требуется создать или изменить в целевой базе данных. Для работы в скриптах, выполняемых перед развертыванием и после него, с более сложными концепциями, например именами входа или связанными серверами, требуются дополнительные разрешения.

ПРИМЕЧАНИЕ.При развертывании в базе данных master вам также требуется разрешение VIEW ANY DEFINITION на сервер, куда выполняется развертывание.

Использование сборки с параметром EXTERNAL_ACCESS в проекте базы данныхВы должны задать свойство TRUSTWORTHY для проекта базы данных. Вы должны иметь разрешение EXTERNAL ACCESS ASSEMBLY для своего имени входа SQL Server.
Развертывание сборок в новую или существующую базу данныхНеобходимо быть членом предопределенной роли sysadmin на целевом сервере развертывания.

Дополнительные сведения см. в электронной документации SQL Server.

Рефакторинг базы данных выполняется только в пределах проекта базы данных. Необходимо иметь разрешения на использование проекта базы данных. Разрешения на целевую базу данных потребуются только в тот момент, когда в нее будут развертываться внесенные изменения.

Для выполнения тестирований модулей базы данных необходимо иметь следующие разрешения.

ДействияНеобходимые разрешения
Выполнение тестаНеобходимо использовать подключение к базе данных в контексте выполнения. Дополнительные сведения см. в разделе Общие сведения о строках подключения и разрешениях.
Выполнение скрипта до или после развертыванияНеобходимо использовать подключение к базе данных в привилегированном контексте. Это подключение к базе данных имеет больше разрешений, чем подключение в контексте выполнения.
Выполнение скриптов TestInitialize и TestCleanupНеобходимо использовать подключение к базе данных в привилегированном контексте.
Развертывание изменений базы данных до выполнения тестовНеобходимо использовать подключение к базе данных в привилегированном контексте. Дополнительные сведения см. в статье Практическое руководство. Настройка запуска модульного теста SQL Server.
Формирование данных до выполнения тестовНеобходимо использовать подключение к базе данных в привилегированном контексте. Дополнительные сведения см. в статье Практическое руководство. Настройка запуска модульного теста SQL Server.

Для формирования тестовых данных с помощью генератора данных у вас должны быть разрешения INSERT и SELECT на объекты из целевой базы данных. Если вы выполняете очистку данных перед формированием данных, вам также нужно иметь разрешения DELETE на объекты из целевой базы данных. Для сброса столбца IDENTITY в таблице вам нужно владеть таблицей или быть членом роли db_owner или db_ddladmin.

Для сравнения схем или данных необходимо иметь следующие разрешения.

ДействияНеобходимые разрешения
Сравнение схем двух баз данныхВам нужно иметь разрешения на импорт объектов и параметров из баз данных, описанные в разделе Разрешения на создание и развертывание базы данных.
Сравните схемы базы данных и проекта базы данныхВам нужно иметь разрешения на импорт объектов и параметров из базы данных, описанные в разделе Разрешения на создание и развертывание базы данных. У вас также должен быть открыт проект базы данных в Visual Studio.
Запись обновлений в целевую базу данныхВам нужно иметь разрешения на развертывание обновлений в целевой базе данных, описанные в разделе Разрешения на создание и развертывание базы данных.
Сравнение данных двух баз данныхКроме разрешений, которые требуются для сравнения схем двух баз данных, требуется также разрешение SELECT на все таблицы, сравнение которых намечено выполнить, и разрешение VIEW DATABASE STATE.

Дополнительные сведения см. в электронной документации SQL Server.

Действия, которые вы можете выполнить в редакторе Transact-SQL, определяются контекстом выполнения в целевой базе данных.

В следующей таблице приведены разрешения, которые требуются для развертывания или отладки проектов CLR.

ДействияНеобходимые разрешения
Развертывание (первоначальное или добавочное) сборки набора разрешений safedb_DDLAdmin ― это разрешение предоставляет разрешения CREATE и ALTER для разворачиваемых вами сборок и типов объектов

VIEW DEFINITION уровня базы данных ― требуется для выполнения развертывания

CONNECT уровня базы данных ― предоставляет возможность подключаться к базе данных

Развертывание сборки набора разрешений external_access
db_DDLAdmin ― это разрешение предоставляет разрешения CREATE и ALTER для разворачиваемых вами сборок и типов объектов

VIEW DEFINITION уровня базы данных ― требуется для выполнения развертывания

CONNECT уровня базы данных ― предоставляет возможность подключаться к базе данных

Кроме того, также требуется:

чтобы параметр TRUSTWORTHY базы данных имел значение ON

Имя входа, которое используется для развертывания, должно иметь разрешение сервера External Access Assembly.

Развертывание сборки набора разрешений unsafedb_DDLAdmin ― это разрешение предоставляет разрешения CREATE и ALTER для разворачиваемых вами сборок и типов объектов

VIEW DEFINITION уровня базы данных ― требуется для выполнения развертывания

CONNECT уровня базы данных ― предоставляет возможность подключаться к базе данных

Кроме того, также требуется:

чтобы параметр TRUSTWORTHY базы данных имел значение ON

Имя входа, которое используется для развертывания, должно иметь разрешение сервера Unsafe Assembly.

Удаленная отладка сборки SQL CLRВы должны иметь разрешение предопределенной роли sysadmin.
 Важно

Во всех случаях владелец сборки должен быть пользователем, который используется для развертывания сборки, либо ролью, членом которой является этот пользователь. Это требование также применяется к любым сборкам, на которые ссылается разворачиваемая вами сборка.

Создание и определение модульных тестов SQL ServerSQL Server Data Tools

msdn.microsoft.com

GRANT, предоставление разрешений на объект (Transact-SQL)

 

ПРИМЕНЯЕТСЯ К: SQL Server (начиная с 2008) База данных SQL Azure Хранилище данных SQL Azure Parallel Data Warehouse

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

Область применения: SQL Server (отSQL Server 2008 до текущей версии), База данных SQL Azure.

  Синтаксические обозначения в 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

разрешениеУказывает разрешение, которое может быть предоставлено на содержащийся в схеме объект. Список разрешений см. в подразделе «Примечания» далее в этом разделе.

ALLПредоставление ALL не включает все возможные разрешения, оно эквивалентно предоставлению всех разрешений ANSI-92, применимых к указанному объекту. Значение ALL различается для разных типов объектов

Разрешения на скалярные функции: выполнение, ссылки.

Табличная функция разрешения: DELETE, INSERT, REFERENCES, SELECT, UPDATE.

Разрешения на хранимые процедуры: выполнение.

Таблица разрешений: DELETE, INSERT, REFERENCES, SELECT, UPDATE.

Просмотреть разрешения: DELETE, INSERT, REFERENCES, SELECT, UPDATE.

PRIVILEGESВключено для обеспечения совместимости с ANSI-92. Не изменяет работу ALL.

столбецУказывает имя столбца в таблице, представление или функции с табличным значением, на которых предоставляется разрешение. Скобки () являются обязательными. На столбец могут быть предоставлены только разрешения SELECT, REFERENCES и UPDATE. столбец может быть указан в предложении permissions или после имени защищаемого объекта.

 Внимание!

Запрет (DENY) уровня таблицы имеет меньший приоритет, чем разрешение (GRANT) уровня столбца. Такая несогласованность в иерархии разрешений сохранена в целях обратной совместимости.

ON [объект::] [ schema_name ]. object_nameУказывает объект, на который предоставляется разрешение. Фраза OBJECT необязательна Если schema_name указано. Если ЖЕ она указана, требуется квалификатор области (::). Если schema_name не указан, используется схема по умолчанию. Если schema_name указано, указание квалификатора области схемы (.).

TO <database_principal>Участник, которому предоставляется разрешение.

WITH GRANT OPTIONПоказывает, что участнику будет дана возможность предоставлять указанное разрешение другим участникам.

AS <database_principal>Указывает участника, от которого участник, выполняющий данный запрос, наследует право на предоставление разрешения.

ПользовательбазыданныхУказывает пользователя базы данных.

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).

Объект является защищаемым на уровне схемы. Он содержится в схеме, которая является его родителем в иерархии разрешений. В следующей таблице перечислен ряд отдельных разрешений, которые могут быть предоставлены на объект, а также наиболее общие разрешения, которые неявно их подразумевают.

Разрешение объектаСодержится в разрешении объектаСодержится в разрешении схемы
ALTERCONTROLALTER
CONTROLCONTROLCONTROL
DELETECONTROLDELETE
ВыполнитеCONTROLВыполните
INSERTCONTROLINSERT
RECEIVECONTROLCONTROL
REFERENCESCONTROLREFERENCES
SELECTRECEIVESELECT
TAKE OWNERSHIPCONTROLCONTROL
UPDATECONTROLUPDATE
VIEW CHANGE TRACKINGCONTROLVIEW CHANGE TRACKING
VIEW DEFINITIONCONTROLVIEW 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.

A. Предоставление разрешения 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) Отмена разрешений на объект (Transact-SQL) Представления каталога объектов (Transact-SQL) Разрешения (компонент Database Engine) Участники (компонент Database Engine) Защищаемые объекты функция sys.fn_builtin_permissions (Transact-SQL) HAS_PERMS_BY_NAME (Transact-SQL) sys.fn_my_permissions (Transact-SQL)

technet.microsoft.com

GRANT, предоставление разрешений на конечные точки (Transact-SQL)

 

ОБЛАСТЬ ПРИМЕНЕНИЯ ЭТОЙ СТАТЬИ: SQL Server (начиная с 2008) База данных SQL Azure Хранилище данных SQL Azure Parallel Data Warehouse

Предоставляет разрешения на конечные точки.

  Синтаксические обозначения в Transact-SQL

GRANT permission [ ,...n ] ON ENDPOINT :: endpoint_name TO < server_principal > [ ,...n ] [ WITH GRANT OPTION ] [ AS SQL_Server_login ] <server_principal> ::= SQL_Server_login | SQL_Server_login_from_Windows_login | SQL_Server_login_from_certificate | SQL_Server_login_from_AsymKey

разрешениеОпределяет разрешения, на конечную точку, которые могут быть предоставлены. Список разрешений см. в подразделе «Примечания» далее в этом разделе.

В конечной ТОЧКЕ ::endpoint_nameУказывает конечную точку, на которую предоставляется разрешение. Квалификатор области (::) является обязательным.

TO <server_principal>Указывает SQL Server имя входа, которому будут представлены разрешения.

SQL_Server_loginУказывает имя входа SQL Server.

SQL_Server_login_from_Windows_loginЗадает имя входа SQL Server, созданное из имени входа Windows.

SQL_Server_login_from_certificateУказывает имя входа SQL Server, сопоставленного с сертификатом.

SQL_Server_login_from_AsymKeyУказывает имя входа SQL Server, сопоставленного с ассиметричным ключом.

WITH GRANT OPTIONПоказывает, что участнику будет дана возможность предоставлять указанное разрешение другим участникам.

AS SQL_Server_loginУказывает имя входа SQL Server, с использованием которого участник, выполняющий этот запрос, осуществляет свое право на предоставление разрешений.

Разрешения в области сервера могут предоставляться только в том случае, если текущая база данных master.

Сведения о конечных точках видны в sys.endpoints представления каталога. Сведения о разрешениях сервера можно увидеть в sys.server_permissions представления каталога, а также сведения об участниках сервера можно увидеть в sys.server_principals представления каталога.

Конечная точка — это защищаемый объект на уровне сервера. Наиболее специфичные и ограниченные разрешения, которые могут быть выданы на конечную точку, перечислены в следующей таблице, вместе с общими разрешениями, неявно содержащими их.

Разрешение конечной точкиСодержится в разрешении конечной точкиПодразумевается в разрешении сервера
ALTERCONTROLALTER ANY ENDPOINT
CONNECTCONTROLCONTROL SERVER
CONTROLCONTROLCONTROL SERVER
TAKE OWNERSHIPCONTROLCONTROL SERVER
VIEW DEFINITIONCONTROLVIEW ANY DEFINITION

Требует разрешения CONTROL в конечной точке или разрешения ALTER ANY ENDPOINT на сервере.

A. Предоставление разрешения VIEW DEFINITION на конечную точку

В следующем примере предоставлено разрешение VIEW DEFINITION на конечную точку Mirror7 для учетной записи ZArifin от SQL Server.

USE master; GRANT VIEW DEFINITION ON ENDPOINT::Mirror7 TO ZArifin; GO

Б. Предоставление разрешения TAKE OWNERSHIP с параметром GRANT OPTION

В следующем примере предоставляется разрешение TAKE OWNERSHIP на конечную точку Shipping83 для пользователя PKomosinski от SQL Server с GRANT OPTION.

USE master; GRANT TAKE OWNERSHIP ON ENDPOINT::Shipping83 TO PKomosinski WITH GRANT OPTION; GO

Запрет разрешения конечной точки (Transact-SQL) Отмена разрешений на конечную точку (Transact-SQL) Создание конечной ТОЧКИ (Transact-SQL) Представления каталога конечных точек (Transact-SQL) sys.Endpoints (Transact-SQL) Разрешения (компонент Database Engine) Участники (компонент Database Engine)

technet.microsoft.com

GRANT, предоставление разрешений на базу данных (Transact-SQL)

 

ПРИМЕНЯЕТСЯ К: SQL Server (начиная с 2008) База данных SQL Azure Хранилище данных SQL Azure Parallel Data Warehouse

Предоставляет разрешения на базу данных в SQL Server.

  Синтаксические обозначения в Transact-SQL

GRANT <permission> [ ,...n ] TO <database_principal> [ ,...n ] [ WITH GRANT OPTION ] [ AS <database_principal> ] <permission>::= permission | ALL [ PRIVILEGES ] <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

разрешениеУказывает разрешение, которое может быть предоставлено в базе данных. Список разрешений см. в подразделе «Примечания» далее в этом разделе.

ALLЭтот параметр не предоставляет все возможные разрешения. Предоставление разрешения ALL эквивалентно предоставлению следующих разрешений: BACKUP DATABASE, BACKUP LOG, CREATE DATABASE, CREATE DEFAULT, CREATE FUNCTION, CREATE PROCEDURE, CREATE RULE, CREATE TABLE и CREATE VIEW.

PRIVILEGESВключено для обеспечения совместимости с требованиями ISO. Не изменяет работу ALL.

WITH GRANT OPTIONПоказывает, что участнику будет дана возможность предоставлять указанное разрешение другим участникам.

AS <database_principal>Указывает участника, от которого участник, выполняющий данный запрос, наследует право на предоставление разрешения.

ПользовательбазыданныхУказывает пользователя базы данных.

Database_roleУказывает роль базы данных.

Application_role

Applies to: SQL Server 2008 through SQL Server 2016, База данных SQL.

Указывает роль приложения.

Database_user_mapped_to_Windows_User

Область применения: начиная с SQL Server 2008 до SQL Server 2016.

Указывает пользователя базы данных, сопоставленного с пользователем Windows.

Database_user_mapped_to_Windows_Group

Область применения: начиная с SQL Server 2008 до SQL Server 2016.

Указывает пользователя базы данных, сопоставленного с группой Windows.

Database_user_mapped_to_certificate

Область применения: начиная с SQL Server 2008 до SQL Server 2016.

Указывает пользователя базы данных, сопоставленного с сертификатом.

Database_user_mapped_to_asymmetric_key

Область применения: начиная с SQL Server 2008 до SQL Server 2016.

Указывает пользователя базы данных, сопоставленного с асимметричным ключом.

Database_user_with_no_loginУказывает пользователя базы данных, не сопоставленного с субъектом серверного уровня.

 Важно

Сочетание разрешений ALTER и REFERENCE в некоторых случаях может позволить просматривать данные или выполнять несанкционированные функции. Например: пользователь с разрешением ALTER на таблицу и разрешением REFERENCE на функцию может создавать вычисляемый столбец на основе функции и выполнять ее. В этом случае пользователю также требуется разрешение SELECT на вычисляемый столбец.

База данных — это защищаемый объект, хранящийся на сервере, который является родителем базы данных в иерархии разрешений. Наиболее специфичные и ограниченные разрешения, которые можно предоставлять в базе данных, перечислены в следующей таблице вместе с общими разрешениями, неявно содержащими их.

Разрешение в базе данныхСодержится в разрешении базы данныхПодразумевается в разрешении сервера
ADMINISTER DATABASE BULK OPERATIONSОбласть применения: База данных SQL.CONTROLCONTROL SERVER
ALTERCONTROLALTER ANY DATABASE
ALTER ANY APPLICATION ROLEALTERCONTROL SERVER
ALTER ANY ASSEMBLYALTERCONTROL SERVER
ALTER ANY ASYMMETRIC KEYALTERCONTROL SERVER
ALTER ANY CERTIFICATEALTERCONTROL SERVER
ALTER ANY COLUMN ENCRYPTION KEYALTERCONTROL SERVER
ИЗМЕНИТЬ ЛЮБОЕ ОПРЕДЕЛЕНИЕ ГЛАВНОГО КЛЮЧА СТОЛБЦОВALTERCONTROL SERVER
ALTER ANY CONTRACTALTERCONTROL SERVER
ALTER ANY DATABASE AUDITALTERALTER ANY SERVER AUDIT
ALTER ANY DATABASE DDL TRIGGERALTERCONTROL SERVER
ALTER ANY DATABASE EVENT NOTIFICATIONALTERALTER ANY EVENT NOTIFICATION
ALTER ANY DATABASE EVENT SESSIONОбласть применения: База данных SQL.ALTERALTER ANY EVENT SESSION
ALTER ANY DATABASE SCOPED CONFIGURATION Applies to: SQL Server 2016 through SQL Server 2016, База данных SQL.CONTROLCONTROL SERVER
ALTER ANY DATASPACEALTERCONTROL SERVER
ALTER ANY EXTERNAL DATA SOURCEALTERCONTROL SERVER
ALTER ANY EXTERNAL FILE FORMATALTERCONTROL SERVER
ALTER ANY FULLTEXT CATALOGALTERCONTROL SERVER
ALTER ANY MASKCONTROLCONTROL SERVER
ALTER ANY MESSAGE TYPEALTERCONTROL SERVER
ALTER ANY REMOTE SERVICE BINDINGALTERCONTROL SERVER
ALTER ANY ROLEALTERCONTROL SERVER
ALTER ANY ROUTEALTERCONTROL SERVER
ALTER ANY SCHEMAALTERCONTROL SERVER
ALTER ANY SECURITY POLICY Область применения: База данных SQL Azure.CONTROLCONTROL SERVER
ALTER ANY SERVICEALTERCONTROL SERVER
ALTER ANY SYMMETRIC KEYALTERCONTROL SERVER
ALTER ANY USERALTERCONTROL SERVER
AUTHENTICATECONTROLAUTHENTICATE SERVER
BACKUP DATABASECONTROLCONTROL SERVER
BACKUP LOGCONTROLCONTROL SERVER
CHECKPOINTCONTROLCONTROL SERVER
CONNECTCONNECT REPLICATIONCONTROL SERVER
CONNECT REPLICATIONCONTROLCONTROL SERVER
CONTROLCONTROLCONTROL SERVER
CREATE AGGREGATEALTERCONTROL SERVER
CREATE ASSEMBLYALTER ANY ASSEMBLYCONTROL SERVER
CREATE ASYMMETRIC KEYALTER ANY ASYMMETRIC KEYCONTROL SERVER
CREATE CERTIFICATEALTER ANY CERTIFICATECONTROL SERVER
CREATE CONTRACTALTER ANY CONTRACTCONTROL SERVER
CREATE DATABASECONTROLCREATE ANY DATABASE
CREATE DATABASE DDL EVENT NOTIFICATIONALTER ANY DATABASE EVENT NOTIFICATIONCREATE DDL EVENT NOTIFICATION
CREATE DEFAULTALTERCONTROL SERVER
CREATE FULLTEXT CATALOGALTER ANY FULLTEXT CATALOGCONTROL SERVER
CREATE FUNCTIONALTERCONTROL SERVER
CREATE MESSAGE TYPEALTER ANY MESSAGE TYPECONTROL SERVER
CREATE PROCEDUREALTERCONTROL SERVER
CREATE QUEUEALTERCONTROL SERVER
CREATE REMOTE SERVICE BINDINGALTER ANY REMOTE SERVICE BINDINGCONTROL SERVER
CREATE ROLEALTER ANY ROLECONTROL SERVER
CREATE ROUTEALTER ANY ROUTECONTROL SERVER
CREATE RULEALTERCONTROL SERVER
CREATE SCHEMAALTER ANY SCHEMACONTROL SERVER
CREATE SERVICEALTER ANY SERVICECONTROL SERVER
CREATE SYMMETRIC KEYALTER ANY SYMMETRIC KEYCONTROL SERVER
CREATE SYNONYMALTERCONTROL SERVER
CREATE TABLEALTERCONTROL SERVER
CREATE TYPEALTERCONTROL SERVER
CREATE VIEWALTERCONTROL SERVER
CREATE XML SCHEMA COLLECTIONALTERCONTROL SERVER
DELETECONTROLCONTROL SERVER
ВыполнитеCONTROLCONTROL SERVER
INSERTCONTROLCONTROL SERVER
KILL DATABASE CONNECTIONОбласть применения: База данных SQL Azure.CONTROLALTER ANY CONNECTION
REFERENCESCONTROLCONTROL SERVER
SELECTCONTROLCONTROL SERVER
SHOWPLANCONTROLALTER TRACE
SUBSCRIBE QUERY NOTIFICATIONSCONTROLCONTROL SERVER
TAKE OWNERSHIPCONTROLCONTROL SERVER
UNMASKCONTROLCONTROL SERVER
UPDATECONTROLCONTROL SERVER
VIEW ANY COLUMN ENCRYPTION KEY DEFINITIONCONTROLVIEW ANY DEFINITION
VIEW ANY COLUMN MASTER KEY DEFINITIONCONTROLVIEW ANY DEFINITION
VIEW DATABASE STATECONTROLVIEW SERVER STATE
VIEW DEFINITIONCONTROLVIEW ANY DEFINITION

Объект, предоставляющий разрешение (или участник, указанный параметром AS), должен иметь либо само разрешение, выданное с помощью параметра GRANT OPTION, либо разрешение более высокого уровня, которое неявно включает предоставляемое.

При использовании параметра AS налагаются следующие дополнительные требования.

AS granting_principalНеобходимо дополнительное разрешение
Пользователь базы данныхРазрешение 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.

Владельцы объектов могут предоставлять разрешения на объекты, которыми они владеют. Участники, имеющие разрешение CONTROL на защищаемый объект, могут предоставлять разрешение на этот защищаемый объект.

Участники, которым предоставлено разрешение CONTROL SERVER, такие как члены предопределенной роли сервера <legacyBold>sysadmin</legacyBold>, могут предоставлять любое разрешение на любой защищаемый объект сервера.

A. Предоставление разрешения на создание таблиц

В следующем примере предоставляется CREATE TABLE разрешение на AdventureWorks базы данных для пользователя MelanieK.

USE AdventureWorks; GRANT CREATE TABLE TO MelanieK; GO

Б. Предоставление разрешения SHOWPLAN роли приложения

В следующем примере роли приложения SHOWPLAN предоставляется разрешение AdventureWorks2012 в базе данных AuditMonitor.

Applies to: SQL Server 2008 through SQL Server 2016, База данных SQL.
USE AdventureWorks2012; GRANT SHOWPLAN TO AuditMonitor; GO

В. Предоставление разрешения CREATE VIEW с параметром GRANT OPTION

В следующем примере пользователю CREATE VIEW предоставляется разрешение AdventureWorks2012 в базе данных CarmineEs с правом предоставлять разрешение CREATE VIEW другим участникам.

USE AdventureWorks2012; GRANT CREATE VIEW TO CarmineEs WITH GRANT OPTION; GO

sys.database_permissions (Transact-SQL) sys.database_principals (Transact-SQL) Создание базы данных (SQL Server Transact-SQL) GRANT (Transact-SQL) Разрешения (компонент Database Engine) Участники (компонент Database Engine)

technet.microsoft.com

DENY, запрет разрешений на сервере (Transact-SQL)

 

ПРИМЕНЯЕТСЯ К: SQL Server (начиная с 2008) База данных SQL Azure Хранилище данных SQL Azure Parallel Data Warehouse

Отзывает разрешения на сервере.

  Синтаксические обозначения в Transact-SQL

DENY permission [ ,...n ] TO <grantee_principal> [ ,...n ] [ CASCADE ] [ AS <grantor_principal> ] <grantee_principal> ::= SQL_Server_login | SQL_Server_login_mapped_to_Windows_login | SQL_Server_login_mapped_to_Windows_group | SQL_Server_login_mapped_to_certificate | SQL_Server_login_mapped_to_asymmetric_key | server_role <grantor_principal> ::= SQL_Server_login | SQL_Server_login_mapped_to_Windows_login | SQL_Server_login_mapped_to_Windows_group | SQL_Server_login_mapped_to_certificate | SQL_Server_login_mapped_to_asymmetric_key | server_role

разрешениеУказывает разрешение, которое может быть запрещено на сервере. Список разрешений см. в подразделе «Примечания» далее в этом разделе.

CASCADEУказывает, что запрещаемое разрешение также запрещается для других участников, которым оно было предоставлено данным участником.

TO <server_principal>Указывает участника, для которого запрещается разрешение.

AS <grantor_principal>Указывает участника, от которого участник, выполняющий данный запрос, получает право на запрещение разрешения.

SQL_Server_loginУказывает имя входа SQL Server.

SQL_Server_login_mapped_to_Windows_loginУказывает имя входа SQL Server, сопоставленное с именем входа Windows.

SQL_Server_login_mapped_to_Windows_groupУказывает имя входа SQL Server, сопоставленное с группой Windows.

SQL_Server_login_mapped_to_certificateУказывает имя входа SQL Server, сопоставленное с сертификатом.

SQL_Server_login_mapped_to_asymmetric_keyУказывает имя входа SQL Server, сопоставленное с асимметричным ключом.

server_roleУказывает роль сервера.

Разрешения в области сервера могут запрещаться только в том случае, если текущей базой данных является master.

Сведения о разрешениях сервера можно просмотреть в sys.server_permissions представления каталога, а также сведения об участниках сервера можно просмотреть в sys.server_principals представления каталога. Можно просмотреть сведения о членстве в роли сервера в sys.server_role_members представления каталога.

Сервер является наивысшим уровнем в иерархии разрешений. Наиболее часто указываемые и ограниченные разрешения, которые могут быть запрещены на сервере, перечислены в следующей таблице.

Разрешение сервераПодразумевается в разрешении сервера
ADMINISTER BULK OPERATIONSCONTROL SERVER
ALTER ANY AVAILABILITY GROUP

 Область применения: SQL Server (сSQL Server 2012 до текущей версии).

CONTROL SERVER
ALTER ANY CONNECTIONCONTROL SERVER
ALTER ANY CREDENTIALCONTROL SERVER
ALTER ANY DATABASECONTROL SERVER
ALTER ANY ENDPOINTCONTROL SERVER
ALTER ANY EVENT NOTIFICATIONCONTROL SERVER
ALTER ANY EVENT SESSIONCONTROL SERVER
ALTER ANY LINKED SERVERCONTROL SERVER
ALTER ANY LOGINCONTROL SERVER
ALTER ANY SERVER AUDITCONTROL SERVER
ALTER ANY SERVER ROLE

 Область применения: SQL Server (сSQL Server 2012 до текущей версии).

CONTROL SERVER
ALTER RESOURCESCONTROL SERVER
ALTER SERVER STATECONTROL SERVER
ALTER SETTINGSCONTROL SERVER
ALTER TRACECONTROL SERVER
AUTHENTICATE SERVERCONTROL SERVER
CONNECT ANY DATABASE

 Область применения: SQL Server (сSQL Server 2014 до текущей версии).

CONTROL SERVER
CONNECT SQLCONTROL SERVER
CONTROL SERVERCONTROL SERVER
CREATE ANY DATABASEALTER ANY DATABASE
Создание группы доступности

 Область применения: SQL Server (сSQL Server 2012 до текущей версии).

ALTER ANY AVAILABILITY GROUP
CREATE DDL EVENT NOTIFICATIONALTER ANY EVENT NOTIFICATION
CREATE ENDPOINTALTER ANY ENDPOINT
CREATE SERVER ROLE

 Область применения: SQL Server (сSQL Server 2012 до текущей версии).

ALTER ANY SERVER ROLE
CREATE TRACE EVENT NOTIFICATIONALTER ANY EVENT NOTIFICATION
EXTERNAL ACCESS ASSEMBLYCONTROL SERVER
IMPERSONATE ANY LOGIN

 Область применения: SQL Server (сSQL Server 2014 до текущей версии).

CONTROL SERVER
SELECT ALL USER SECURABLES

 Область применения: SQL Server (сSQL Server 2014 до текущей версии).

CONTROL SERVER
SHUTDOWNCONTROL SERVER
UNSAFE ASSEMBLYCONTROL SERVER
VIEW ANY DATABASEVIEW ANY DEFINITION
VIEW ANY DEFINITIONCONTROL SERVER
VIEW SERVER STATEALTER SERVER STATE

Следующие три разрешения сервера добавлены в SQL Server 2014.

ПОДКЛЮЧИТЬСЯ любой базы данных разрешенияПредоставьте разрешение CONNECT ANY DATABASE имени входа, которому нужно подключиться ко всем существующим базам данных и ко всем новым базам, которые могут быть созданы в будущем. Не предоставляет каких-либо разрешений в базах данных за пределами соединения. Объедините с SELECT ALL USER SECURABLES и VIEW SERVER STATE, чтобы разрешить процессу аудита просмотр всех данных или всех состояний базы данных в экземпляре SQL Server.

ОЛИЦЕТВОРЕНИЕ ЛЮБОГО имени входа разрешенияПосле предоставления разрешает процессу среднего уровня олицетворять учетную запись клиентов, подключающихся к ней, так как она подключается к базам данных. При запрещении имени входа с высоким уровнем прав может быть запрещено олицетворение других имен входа. Например, имени входа с разрешением CONTROL SERVER можно запретить олицетворение других имен входа.

ВЫБЕРИТЕ все защищаемые ОБЪЕКТЫ пользователя разрешенияПосле предоставления имя входа, например аудитор, сможет просматривать данные во всех базах данных, к которым может подключаться пользователь. При запрещении предотвращает доступ к объектам, если они находятся в sys схемы.

Необходимо иметь разрешение CONTROL SERVER или быть владельцем защищаемого объекта. При использовании предложения AS указанный участник должен быть владельцем защищаемого объекта, разрешения на который у него запрещены.

A. Запрет разрешения CONNECT SQL для пользователя SQL Server с указанным именем входа и участников, которым этот пользователь его предоставил

В следующем примере разрешение CONNECT SQL запрещается для пользователя SQL Server с именем входа Annika и для участников, которым он предоставил это разрешение.

USE master; DENY CONNECT SQL TO Annika CASCADE; GO

Б. Запрет разрешения CREATE ENDPOINT для пользователя SQL Server с помощью параметра AS

В следующем примере разрешение CREATE ENDPOINT запрещается для пользователя ArifS. Пример использует параметр AS для указания пользователя MandarP в качестве участника, от которого текущий участник получает права для выполнения.

USE master; DENY CREATE ENDPOINT TO ArifS AS MandarP; GO

GRANT (Transact-SQL) DENY (Transact-SQL) ЗАПРЕТ разрешений сервера (Transact-SQL) Отмена разрешений сервера (Transact-SQL) Иерархия разрешений (компонент Database Engine) функция sys.fn_builtin_permissions (Transact-SQL) sys.fn_my_permissions (Transact-SQL) HAS_PERMS_BY_NAME (Transact-SQL)

technet.microsoft.com

sql - Разрешения пользователя SQL Server на хранимую процедуру и базовые таблицы

Разрешения на таблицы не проверяются, если таблицы и процедура имеют один и тот же владелец. Это называется цепочкой прав собственности.

Обратите внимание, что "собственность" в этом контексте означает "владелец схемы". Например, таблица TestDB.Schema1.Table1 принадлежит пользователю, которому принадлежит Schema1.

Поскольку у Orders есть тот же владелец, что и GetCustomerOrderInfo, хранимая процедура имеет неявные права на чтение из Orders.

Но у Customers есть другой владелец, поэтому вы должны предоставить разрешение на это явно.

Вот тестовый скрипт, демонстрирующий проблему:

use Test go if exists (select * from sys.syslogins where name = 'UserA') drop login UserA create login UserA with password = 'Welcome' if exists (select * from sys.syslogins where name = 'UserB') drop login UserB create login UserB with password = 'Welcome' if exists (select * from sys.syslogins where name = 'UserC') drop login UserC create login UserC with password = 'Welcome' if exists (select * from sys.tables where name = 'Customers' and schema_name(schema_id) = 'SchemaA') drop table SchemaA.Customers if exists (select * from sys.schemas where name = 'SchemaA') drop schema SchemaA if exists (select * from sys.sysusers where name = 'UserA') drop user UserA if exists (select * from sys.tables where name = 'Orders' and schema_name(schema_id) = 'SchemaB') drop table SchemaB.Orders if exists (select * from sys.procedures where name = 'GetCustomerOrderInfo' and schema_name(schema_id) = 'SchemaB') drop procedure SchemaB.GetCustomerOrderInfo if exists (select * from sys.schemas where name = 'SchemaB') drop schema SchemaB if exists (select * from sys.sysusers where name = 'UserB') drop user UserB if exists (select * from sys.sysusers where name = 'UserC') drop user UserC create user UserA for login UserA alter role db_owner add member UserA go create schema SchemaA authorization UserA go create user UserB for login UserB alter role db_owner add member UserB go create schema SchemaB authorization UserB go create user UserC for login UserC create table SchemaA.Customers (id int identity) create table SchemaB.Orders (id int identity, CustomerId int) go create procedure SchemaB.GetCustomerOrderInfo as select * from SchemaB.Orders o join SchemaA.Customers c on c.id = o.CustomerId go

Когда мы все настроены, мы можем протестировать процедуру с разными разрешениями. Сначала нам нужно выполнить разрешение на хранимую процедуру, а затем прочитать разрешение на Customers. После этого хранится процедура, хотя мы не предоставляем доступ на чтение в Orders.

execute as login = 'UserC' -- Login as UserC exec SchemaB.GetCustomerOrderInfo -- The EXECUTE permission was denied on the object 'GetCustomerOrderInfo', database 'Test', schema 'SchemaB' revert -- Revert back to our original login grant execute on SchemaB.GetCustomerOrderInfo to UserC execute as login = 'UserC' exec SchemaB.GetCustomerOrderInfo -- The SELECT permission was denied on the object 'Customers', database 'Test', schema 'SchemaA'. revert grant select on SchemaA.Customers to UserC execute as login = 'UserC' exec SchemaB.GetCustomerOrderInfo -- (0 row(s) affected) revert

qaru.site

Проверка прав доступа и разрешений в SQL Server

 

После создания объектов базы данных необходимо явно предоставить разрешения, чтобы сделать их доступными для пользователей. Каждый защищаемый объект имеет разрешения, которые могут быть предоставлены участнику с помощью инструкций разрешения.

Принцип минимальных привилегий

Подход к разработке приложений на основе учетных записей пользователей с минимальными правами доступа (LUA) представляет собой важной часть оборонительной, всесторонней стратегии противостояния угрозам безопасности. Подход LUA гарантирует то, что пользователи будут следовать принципу минимальных разрешений и всегда регистрироваться с помощью ограниченных учетных записей пользователя. Административные задачи подразделяются на категории с использованием предопределенных ролей сервера, а возможность применения предопределенной роли сервера sysadmin строго ограничивается.

Всегда следуйте принципу минимальных прав при предоставлении разрешений пользователям базы данных. Предоставляйте минимальные разрешения, необходимые пользователю или роли для выполнения каждой конкретной задачи.

Безопасность Примечание

Разработка и проверка приложений с использованием подхода LUA вносит дополнительные сложности в процесс разработки. Проще создавать объекты и разрабатывать код, будучи зарегистрированным в качестве системного администратора или владельца базы данных, чем при использовании учетной записи LUA. Но разработка приложений в рамках высоко привилегированной учетной записи может не дать почувствовать влияния уменьшенных функциональных возможностей, которые обнаруживаются при попытке наименее привилегированных пользователей эксплуатировать приложение, для надлежащего функционирования которого требуется более высокий уровень разрешений. А после того как пользователям будут предоставлены чрезмерные разрешения, чтобы они могли вновь приобрести утраченные функциональные возможности, приложение может оказаться уязвимым для атаки. Проектирование, разработка и проверка приложения в условиях регистрации в учетной записи LUA требуют дисциплинированного подхода к планированию безопасности, что позволяет избежать неприятных сюрпризов и избавиться от стремления предоставлять расширенные права в целях скорейшего возобновления работы. Для проверки можно использовать имя входа SQL Server, даже если приложение предназначено для развертывания и эксплуатации с использованием проверки подлинности Windows.

Разрешения на основе ролей

Если разрешения предоставляются ролям, а не пользователям, то администрирование средств безопасности упрощается. Наборы разрешений, назначенные ролям, становятся унаследованными всеми членами роли. Проще добавлять или удалять пользователей из состава членов роли, чем повторно создавать отдельные наборы разрешений для каждого пользователя. Роли могут быть вложенными; но применение слишком большого количества уровней вложенности может привести к снижению производительности. Можно также вводить пользователей в состав членов предопределенных ролей базы данных в целях упрощения задачи назначения разрешений.

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

Управление разрешениями с помощью процедурного кода

Инкапсуляция средств доступа к данным с помощью таких модулей, как хранимые процедуры и определяемые пользователем функции, позволяет создать для приложения дополнительный уровень защиты. Чтобы исключить для пользователей возможность непосредственно взаимодействовать с объектами базы данных, можно предоставлять им разрешения только на хранимые процедуры или функции и отказывать в предоставлении разрешений на базовые объекты, такие как таблицы. В СУБД SQL Server такая цель достигается путем формирования цепочек владения.

Инструкции разрешения

Три инструкции разрешения языка Transact-SQL описаны в следующей таблице.

Инструкция разрешения

Описание

GRANT

Предоставляет разрешение.

REVOKE

Отменяет разрешение. Это — состояние нового объекта, предусмотренное по умолчанию. Разрешение, в котором отказано пользователю или роли, все еще может быть унаследовано от других групп или ролей, в которые назначен участник.

DENY

Инструкция DENY отменяет разрешение так, что его нельзя больше унаследовать. Инструкция DENY имеет наивысший приоритет по сравнению со всеми инструкциями разрешения, однако действие инструкции DENY не распространяется на владельцев объектов или на членов роли sysadmin. Если осуществляется отзыв разрешений с помощью инструкции DENY на какой-либо объект по отношению к роли public, то этот отзыв распространяется на всех пользователей и все роли, кроме владельцев объекта и членов роли sysadmin.

  • Инструкция GRANT позволяет назначать группе или роли разрешения, которые могут быть унаследованы пользователями базы данных. Но инструкция DENY имеет более высокий приоритет по сравнению со всеми другими инструкциями разрешения. Поэтому пользователь, которому было отказано в разрешении, не сможет унаследовать его от другой роли.

Примечание

Членам предопределенной роли сервера sysadmin и владельцам объекта не может быть отказано в разрешениях.

Цепочки владения

SQL Server гарантирует, что только участники, которым были предоставлены разрешения, могут получить доступ к объектам. Если несколько объектов базы данных последовательно обращаются друг к другу, то такая последовательность известна как цепочка. В СУБД SQL Server при прохождении по ссылкам в цепочке владения проверка разрешений происходит иначе, чем при получении доступа отдельно к каждому объекту. Если доступ к объекту осуществляется с помощью цепочки владения, то в SQL Server вначале сравнивается владелец объекта с владельцем вызывающего объекта (который представляет предыдущую ссылку в цепочке). Если оба объекта имеют одного владельца, то разрешения для объекта, указанного в ссылке, не проверяются. После обнаружения любой ситуации, в которой доступ к объекту осуществляется со стороны объекта, имеющего другого владельца, цепочка владения разрывается и в SQL Server должна быть выполнена проверка контекста безопасности вызывающего объекта.

Процедурный код и формирование цепочки владения

Предположим, что пользователю предоставлены права на выполнение хранимой процедуры, которая предназначена для выборки данных из таблицы. Если хранимая процедура и таблица имеют одного и того же владельца, то пользователю не требуется предоставлять какие-либо разрешения на таблицу и ему может быть даже отказано в таких разрешениях. Но если хранимая процедура и таблица имеют разных владельцев, то в СУБД SQL Server требуется проверить разрешения пользователя на таблицу, прежде чем предоставить доступ к данным.

Примечание

Формирование цепочки владения не применяется в случае выполнения динамических инструкций SQL. Чтобы вызвать процедуру, в которой выполняется инструкция SQL, вызывающему объекту необходимо предоставить разрешения на базовые таблицы, в результате чего приложение становится уязвимым для атаки путем внедрения кода SQL. SQL Server предоставляет новые механизмы, такие как олицетворение и подписание модулей с помощью сертификатов, не требующие предоставления разрешений на базовые таблицы. Эти механизмы могут также использоваться для работы с хранимыми процедурами среды CLR.

Внешние ресурсы

Дополнительные сведения см. в следующих ресурсах.

Ресурс

Описание

Разрешения в электронной документации по SQL Server

Содержит разделы, описывающие иерархию разрешений, представления каталога и разрешения предопределенных ролей сервера и базы данных.

technet.microsoft.com