какое sql выражение можно использовать для добавления прав пользователю

Как в MS SQL Server создать пользователя

какое sql выражение можно использовать для добавления прав пользователю

На первый взгляд, в MS SQL нестандартная система учетных записей. В ней существуют логины и пользователи.

Оба типа учетных записи можно создать как в графике, так и с помощью запроса T-SQL

T-SQL CREATE USER, CREATE LOGIN

Перейдем в базу данных, в которой мы работаем:

Для создания логина SQL выполним:

Посмотреть что этот логин создался можно так:

какое sql выражение можно использовать для добавления прав пользователю

Для создания пользователя привязанного к логину нужно выполнить:

Отмечу, что пользователь создасться в той базе, откуда мы выполняем запрос.

Что бы просто создать пользователя нужно:

Созданных пользователей можно увидеть так:

какое sql выражение можно использовать для добавления прав пользователю

Пользователи создаются без каких либо прав на базу.

T-SQL GRANT

GRANT в пер. «Разрешение» дает права на какое-то действие.

Что бы дать пользователю право получать данные из какой-то таблицы нужно выполнить:

Если мы хотим зайти под созданным пользователем нам нужно выполнить ряд действий. Дело в том, что по умолчанию аутентификация по логинам SQL отключена (разрешена только Windows). Для этого зайдем в свойства сервера:

какое sql выражение можно использовать для добавления прав пользователю

Затем в «Безопасность» и включи аутентификация SQL

какое sql выражение можно использовать для добавления прав пользователю

какое sql выражение можно использовать для добавления прав пользователю

Важно сделать так, что бы у нас было 2 окошка для запросов до того как мы сменем пользователя. Благодаря этому у нас каждое окно будет работать под разными пользователями

Затем окно подключения пользователя:

какое sql выражение можно использовать для добавления прав пользователю

Меняем тип подключени на SQL и вводим логин/пароль. Я создавал логин Anton, с паролем Password1910.

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

какое sql выражение можно использовать для добавления прав пользователю

Перейдем к базе, на которую мы давали права. В моем случае это база pubs

Я давал права на SELECT для таблицы dbo.authors. Проверем работу:

Запрос дожен пройти успешно.

Для другой таблицы, на которую мы не давали прав:

The SELECT permission was denied on the object ‘titles’, database ‘pubs’, schema ‘dbo’.

Что бы отозвать разрешение на SELECT нужно заменить GRANT на REVOKE (не забудьте переключится на окно у которого есть разрешение или переключится на предыдущего пользователя):

Разрешений, которые мы можем выдать пользователю достаточно много. Это основные:

какое sql выражение можно использовать для добавления прав пользователю

Мы можем так же явно запретить пользователю выполнять определенные запросы. Для этого есть DENY:

Что ба дать разрешение на создание таблиц:

Теперь создадим логин через графический интерфейс. Нажмем следующие кнопки:

какое sql выражение можно использовать для добавления прав пользователю

В новом окне мы должны заполнить логин (1) и пароль (3). Под цифрой 2 мы можем увидеть выбор способа аутентификации. В случае Windows мы должны будем выбрать локального пользователя или пользователя AD. Перейдем на закладку Server Roles (4).

какое sql выражение можно использовать для добавления прав пользователю

какое sql выражение можно использовать для добавления прав пользователю

Приведу описание самых популярных ролей:

какое sql выражение можно использовать для добавления прав пользователю

Перейдем на следующую вкладку (2)

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

какое sql выражение можно использовать для добавления прав пользователю

Коротко о нескольких ролях баз данных:

какое sql выражение можно использовать для добавления прав пользователю

Роль public, в отличии от всех остальных, можно изменять. Т.е. можно дать роли public разрешение на SELECT и тогда все пользователи с логином смогут это делать. По умолчанию эта ролько может делать запросы типа:

Источник

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

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

какое sql выражение можно использовать для добавления прав пользователюСинтаксические обозначения в Transact-SQL

Синтаксис

Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.

Аргументы

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

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

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

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

Database_user — указывает пользователя базы данных.

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

Application_roleприменимо к: SQL Server 2008 и выше, База данных SQL

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

Database_user_mapped_to_Windows_Userприменимо к: SQL Server 2008 и выше

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

Database_user_mapped_to_Windows_Groupприменимо к: SQL Server 2008 и выше

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

Database_user_mapped_to_certificateприменимо к: SQL Server 2008 и выше

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

Database_user_mapped_to_asymmetric_keyприменимо к: SQL Server 2008 и выше

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

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

Remarks

Сочетание разрешений 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
ALTER ANY COLUMN MASTER KEY DEFINITIONALTERCONTROL 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
Применимо к: SQL Server 2016 (13.x); и выше, База данных SQL.
CONTROLCONTROL SERVER
ALTER ANY DATASPACEALTERCONTROL SERVER
ALTER ANY EXTERNAL DATA SOURCEALTERCONTROL SERVER
ALTER ANY EXTERNAL FILE FORMATALTERCONTROL SERVER
ALTER ANY EXTERNAL LIBRARY
Применимо к: SQL Server 2017 (14.x);.
CONTROLCONTROL 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 ANY EXTERNAL LIBRARY
Применимо к: SQL Server 2017 (14.x);.
CONTROLCONTROL 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
EXECUTECONTROLCONTROL SERVER
EXECUTE ANY EXTERNAL SCRIPT
Применимо к: SQL Server 2016 (13.x);.
CONTROLCONTROL SERVER
EXECUTE EXTERNAL SCRIPT
Применимо к: SQL Server 2019 (15.x).
EXECUTE ANY EXTERNAL SCRIPTCONTROL 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 на защищаемый объект, могут предоставлять разрешение на этот защищаемый объект.

Примеры

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

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

Применимо к: SQL Server 2008 и выше, База данных SQL

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

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

Г. Предоставление разрешения CONTROL пользователю базы данных

Источник

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

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

какое sql выражение можно использовать для добавления прав пользователюСинтаксические обозначения в Transact-SQL

Синтаксис

Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.

Аргументы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Remarks

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

Сведения об объектах доступны через различные представления каталога. Дополнительные сведения см. в разделе Представления каталога объектов (Transact-SQL).

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

Разрешение объектаСодержится в разрешении объектаСодержится в разрешении схемы
ALTERCONTROLALTER
CONTROLCONTROLCONTROL
DELETECONTROLDELETE
EXECUTECONTROLEXECUTE
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 на таблицу

Б. Предоставление разрешения EXECUTE на хранимую процедуру

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

Г. Предоставление разрешения SELECT на таблицу без использования фразы OBJECT

Д. Предоставление учетной записи домена разрешения SELECT на таблицу

Е. Предоставление роли разрешения EXECUTE на процедуру

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *