Разрешения, необходимые для запуска 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 на целевом сервере. 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.
Развертывание (первоначальное или добавочное) сборки набора разрешений safe | db_DDLAdmin ― это разрешение предоставляет разрешения CREATE и ALTER для разворачиваемых вами сборок и типов объектов VIEW DEFINITION уровня базы данных ― требуется для выполнения развертывания CONNECT уровня базы данных ― предоставляет возможность подключаться к базе данных |
Развертывание сборки набора разрешений external_access | VIEW DEFINITION уровня базы данных ― требуется для выполнения развертывания CONNECT уровня базы данных ― предоставляет возможность подключаться к базе данных Кроме того, также требуется: чтобы параметр TRUSTWORTHY базы данных имел значение ON Имя входа, которое используется для развертывания, должно иметь разрешение сервера External Access Assembly. |
Развертывание сборки набора разрешений unsafe | db_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).
Объект является защищаемым на уровне схемы. Он содержится в схеме, которая является его родителем в иерархии разрешений. В следующей таблице перечислен ряд отдельных разрешений, которые могут быть предоставлены на объект, а также наиболее общие разрешения, которые неявно их подразумевают.
ALTER | CONTROL | ALTER |
CONTROL | CONTROL | CONTROL |
DELETE | CONTROL | DELETE |
Выполните | CONTROL | Выполните |
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 налагаются следующие дополнительные требования.
Пользователь базы данных | Разрешение 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 ; GODENY, разрешения объекта (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 представления каталога.
Конечная точка — это защищаемый объект на уровне сервера. Наиболее специфичные и ограниченные разрешения, которые могут быть выданы на конечную точку, перечислены в следующей таблице, вместе с общими разрешениями, неявно содержащими их.
ALTER | CONTROL | ALTER ANY ENDPOINT |
CONNECT | CONTROL | CONTROL SERVER |
CONTROL | CONTROL | CONTROL SERVER |
TAKE OWNERSHIP | CONTROL | CONTROL SERVER |
VIEW DEFINITION | CONTROL | VIEW 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. | CONTROL | CONTROL SERVER |
ALTER | CONTROL | ALTER ANY DATABASE |
ALTER ANY APPLICATION ROLE | ALTER | CONTROL SERVER |
ALTER ANY ASSEMBLY | ALTER | CONTROL SERVER |
ALTER ANY ASYMMETRIC KEY | ALTER | CONTROL SERVER |
ALTER ANY CERTIFICATE | ALTER | CONTROL SERVER |
ALTER ANY COLUMN ENCRYPTION KEY | ALTER | CONTROL SERVER |
ИЗМЕНИТЬ ЛЮБОЕ ОПРЕДЕЛЕНИЕ ГЛАВНОГО КЛЮЧА СТОЛБЦОВ | ALTER | CONTROL SERVER |
ALTER ANY CONTRACT | ALTER | CONTROL SERVER |
ALTER ANY DATABASE AUDIT | ALTER | ALTER ANY SERVER AUDIT |
ALTER ANY DATABASE DDL TRIGGER | ALTER | CONTROL SERVER |
ALTER ANY DATABASE EVENT NOTIFICATION | ALTER | ALTER ANY EVENT NOTIFICATION |
ALTER ANY DATABASE EVENT SESSIONОбласть применения: База данных SQL. | ALTER | ALTER ANY EVENT SESSION |
ALTER ANY DATABASE SCOPED CONFIGURATION Applies to: SQL Server 2016 through SQL Server 2016, База данных SQL. | CONTROL | CONTROL SERVER |
ALTER ANY DATASPACE | ALTER | CONTROL SERVER |
ALTER ANY EXTERNAL DATA SOURCE | ALTER | CONTROL SERVER |
ALTER ANY EXTERNAL FILE FORMAT | ALTER | CONTROL SERVER |
ALTER ANY FULLTEXT CATALOG | ALTER | CONTROL SERVER |
ALTER ANY MASK | CONTROL | CONTROL SERVER |
ALTER ANY MESSAGE TYPE | ALTER | CONTROL SERVER |
ALTER ANY REMOTE SERVICE BINDING | ALTER | CONTROL SERVER |
ALTER ANY ROLE | ALTER | CONTROL SERVER |
ALTER ANY ROUTE | ALTER | CONTROL SERVER |
ALTER ANY SCHEMA | ALTER | CONTROL SERVER |
ALTER ANY SECURITY POLICY Область применения: База данных SQL Azure. | CONTROL | CONTROL SERVER |
ALTER ANY SERVICE | ALTER | CONTROL SERVER |
ALTER ANY SYMMETRIC KEY | ALTER | CONTROL SERVER |
ALTER ANY USER | ALTER | CONTROL SERVER |
AUTHENTICATE | CONTROL | AUTHENTICATE SERVER |
BACKUP DATABASE | CONTROL | CONTROL SERVER |
BACKUP LOG | CONTROL | CONTROL SERVER |
CHECKPOINT | CONTROL | CONTROL SERVER |
CONNECT | CONNECT REPLICATION | CONTROL SERVER |
CONNECT REPLICATION | CONTROL | CONTROL SERVER |
CONTROL | CONTROL | CONTROL SERVER |
CREATE AGGREGATE | ALTER | CONTROL SERVER |
CREATE ASSEMBLY | ALTER ANY ASSEMBLY | CONTROL SERVER |
CREATE ASYMMETRIC KEY | ALTER ANY ASYMMETRIC KEY | CONTROL SERVER |
CREATE CERTIFICATE | ALTER ANY CERTIFICATE | CONTROL SERVER |
CREATE CONTRACT | ALTER ANY CONTRACT | CONTROL SERVER |
CREATE DATABASE | CONTROL | CREATE ANY DATABASE |
CREATE DATABASE DDL EVENT NOTIFICATION | ALTER ANY DATABASE EVENT NOTIFICATION | CREATE DDL EVENT NOTIFICATION |
CREATE DEFAULT | ALTER | CONTROL SERVER |
CREATE FULLTEXT CATALOG | ALTER ANY FULLTEXT CATALOG | CONTROL SERVER |
CREATE FUNCTION | ALTER | CONTROL SERVER |
CREATE MESSAGE TYPE | ALTER ANY MESSAGE TYPE | CONTROL SERVER |
CREATE PROCEDURE | ALTER | CONTROL SERVER |
CREATE QUEUE | ALTER | CONTROL SERVER |
CREATE REMOTE SERVICE BINDING | ALTER ANY REMOTE SERVICE BINDING | CONTROL SERVER |
CREATE ROLE | ALTER ANY ROLE | CONTROL SERVER |
CREATE ROUTE | ALTER ANY ROUTE | CONTROL SERVER |
CREATE RULE | ALTER | CONTROL SERVER |
CREATE SCHEMA | ALTER ANY SCHEMA | CONTROL SERVER |
CREATE SERVICE | ALTER ANY SERVICE | CONTROL SERVER |
CREATE SYMMETRIC KEY | ALTER ANY SYMMETRIC KEY | CONTROL SERVER |
CREATE SYNONYM | ALTER | CONTROL SERVER |
CREATE TABLE | ALTER | CONTROL SERVER |
CREATE TYPE | ALTER | CONTROL SERVER |
CREATE VIEW | ALTER | CONTROL SERVER |
CREATE XML SCHEMA COLLECTION | ALTER | CONTROL SERVER |
DELETE | CONTROL | CONTROL SERVER |
Выполните | CONTROL | CONTROL SERVER |
INSERT | CONTROL | CONTROL SERVER |
KILL DATABASE CONNECTIONОбласть применения: База данных SQL Azure. | CONTROL | ALTER ANY CONNECTION |
REFERENCES | CONTROL | CONTROL SERVER |
SELECT | CONTROL | CONTROL SERVER |
SHOWPLAN | CONTROL | ALTER TRACE |
SUBSCRIBE QUERY NOTIFICATIONS | CONTROL | CONTROL SERVER |
TAKE OWNERSHIP | CONTROL | CONTROL SERVER |
UNMASK | CONTROL | CONTROL SERVER |
UPDATE | CONTROL | CONTROL SERVER |
VIEW ANY COLUMN ENCRYPTION KEY DEFINITION | CONTROL | VIEW ANY DEFINITION |
VIEW ANY COLUMN MASTER KEY DEFINITION | CONTROL | VIEW ANY DEFINITION |
VIEW DATABASE STATE | CONTROL | VIEW SERVER STATE |
VIEW DEFINITION | CONTROL | VIEW ANY DEFINITION |
Объект, предоставляющий разрешение (или участник, указанный параметром AS), должен иметь либо само разрешение, выданное с помощью параметра GRANT OPTION, либо разрешение более высокого уровня, которое неявно включает предоставляемое.
При использовании параметра 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. |
Владельцы объектов могут предоставлять разрешения на объекты, которыми они владеют. Участники, имеющие разрешение 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. |
В. Предоставление разрешения CREATE VIEW с параметром GRANT OPTION
В следующем примере пользователю CREATE VIEW предоставляется разрешение AdventureWorks2012 в базе данных CarmineEs с правом предоставлять разрешение CREATE VIEW другим участникам.
USE AdventureWorks2012; GRANT CREATE VIEW TO CarmineEs WITH GRANT OPTION; GOsys.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 OPERATIONS | CONTROL SERVER |
ALTER ANY AVAILABILITY GROUP Область применения: SQL Server (сSQL Server 2012 до текущей версии). | CONTROL SERVER |
ALTER ANY CONNECTION | CONTROL SERVER |
ALTER ANY CREDENTIAL | CONTROL SERVER |
ALTER ANY DATABASE | CONTROL SERVER |
ALTER ANY ENDPOINT | CONTROL SERVER |
ALTER ANY EVENT NOTIFICATION | CONTROL SERVER |
ALTER ANY EVENT SESSION | CONTROL SERVER |
ALTER ANY LINKED SERVER | CONTROL SERVER |
ALTER ANY LOGIN | CONTROL SERVER |
ALTER ANY SERVER AUDIT | CONTROL SERVER |
ALTER ANY SERVER ROLE Область применения: SQL Server (сSQL Server 2012 до текущей версии). | CONTROL SERVER |
ALTER RESOURCES | CONTROL SERVER |
ALTER SERVER STATE | CONTROL SERVER |
ALTER SETTINGS | CONTROL SERVER |
ALTER TRACE | CONTROL SERVER |
AUTHENTICATE SERVER | CONTROL SERVER |
CONNECT ANY DATABASE Область применения: SQL Server (сSQL Server 2014 до текущей версии). | CONTROL SERVER |
CONNECT SQL | CONTROL SERVER |
CONTROL SERVER | CONTROL SERVER |
CREATE ANY DATABASE | ALTER ANY DATABASE |
Создание группы доступности Область применения: SQL Server (сSQL Server 2012 до текущей версии). | ALTER ANY AVAILABILITY GROUP |
CREATE DDL EVENT NOTIFICATION | ALTER ANY EVENT NOTIFICATION |
CREATE ENDPOINT | ALTER ANY ENDPOINT |
CREATE SERVER ROLE Область применения: SQL Server (сSQL Server 2012 до текущей версии). | ALTER ANY SERVER ROLE |
CREATE TRACE EVENT NOTIFICATION | ALTER ANY EVENT NOTIFICATION |
EXTERNAL ACCESS ASSEMBLY | CONTROL SERVER |
IMPERSONATE ANY LOGIN Область применения: SQL Server (сSQL Server 2014 до текущей версии). | CONTROL SERVER |
SELECT ALL USER SECURABLES Область применения: SQL Server (сSQL Server 2014 до текущей версии). | CONTROL SERVER |
SHUTDOWN | CONTROL SERVER |
UNSAFE ASSEMBLY | CONTROL SERVER |
VIEW ANY DATABASE | VIEW ANY DEFINITION |
VIEW ANY DEFINITION | CONTROL SERVER |
VIEW SERVER STATE | ALTER 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; GOGRANT (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) revertqaru.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