В этом руководстве вы узнаете, как использовать оператор SQL Server GRANT для предоставления пользователю разрешений на доступ к объекту базы данных.
Введение в оператор GRANT SQL Server
После создания пользователя с помощью оператора CREATE USER у него нет никаких разрешений на объекты базы данных, такие как таблицы, представления и индексы.
Чтобы разрешить пользователю взаимодействовать с объектами базы данных, необходимо предоставить пользователю разрешения. Например, можно предоставить разрешения, чтобы пользователь мог выбирать данные из таблицы. Чтобы предоставить пользователю разрешения, используйте оператор GRANT.
Оператор GRANT позволяет предоставить принципалу разрешения на защищаемый объект.
- Защищаемый объект — это ресурс, к которому система авторизации SQL Server регулирует доступ. Например, таблица — это защищаемый объект.
- Принципал — это сущность, которая может запрашивать ресурс SQL Server. Например, пользователь является принципалом в SQL Server.
Вот базовый синтаксис оператора GRANT SQL Server:
GRANT permissions ON securable TO principal;
В этом синтаксисе:
- Сначала укажите одно или несколько разрешений после ключевых слов GRANT. Если у вас несколько разрешений, вам нужно использовать запятую для разделения разрешений.
- Во-вторых, укажите защищаемый объект после ключевого слова ON.
- В-третьих, укажите принципала после ключевого слова TO.
Пример GRANT для SQL Server
Давайте рассмотрим пример использования оператора GRANT.
Сначала создайте базу данных HR с таблицей People:
USE master; GO DROP DATABASE IF EXISTS HR; GO CREATE DATABASE HR; GO USE HR; CREATE TABLE People( Id int IDENTITY PRIMARY KEY, FirstName varchar(50) NOT NULL, LastName varchar(50) NOT NULL ); INSERT INTO People(FirstName, LastName) VALUES('John', 'Doe'), ('Jane', 'Doe'), ('Upton', 'Luis'), ('Dach', 'Keon');
Во-вторых, создайте логин с именем peter:
CREATE LOGIN peter WITH PASSWORD='XUnVe2di45.';
В-третьих, создайте пользователя peter в базе данных HR для входа peter:
USE HR; CREATE USER peter FOR LOGIN peter;
В-четвертых, подключитесь к SQL Server, используя пользователя peter. И вы увидите, что пользователь peter может получить доступ к базе данных HR, но не может просматривать таблицы.
В-пятых, переключитесь на подключение системного администратора и предоставьте разрешение SELECT пользователю peter в таблице People:
GRANT SELECT ON People TO peter;
В-шестых, пользователь peter может видеть таблицу People и выбирать из нее данные. Например:
SELECT * FROM People;
Однако пользователь peter не может вставить данные в таблицу People:
INSERT INTO People(FirstName, LastName) VALUES('Tony','Blair');
SQL Server выдает следующие ошибки:
The INSERT permission was denied on the object 'People', database 'HR', schema 'dbo'.
Аналогично пользователь peter также не может удалить данные из таблицы People:
DELETE FROM People WHERE Id = 1;
Ошибка:
The DELETE permission was denied on the object 'People', database 'HR', schema 'dbo'.
В-пятых, предоставьте пользователю peter разрешения INSERT и DELETE для таблицы People:
GRANT INSERT, DELETE ON People TO peter;
В-шестых, переключитесь на подключение пользователя peter и вставьте новую строку в таблицу People:
INSERT INTO People(FirstName, LastName) VALUES('Tony','Blair');
Теперь пользователь peter может вставлять данные в таблицу People и удалять данные из нее.
Краткое содержание
- Используйте оператор GRANT для предоставления разрешений на защищаемый объект субъекту.