Published on

June 16, 2015

Предоставление ограниченных разрешений на создание представлений в SQL Server

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

Сначала давайте создадим пример базы данных и роль, которой мы назначим необходимые разрешения:

CREATE DATABASE yourdb;
GO

USE yourdb;
GO

CREATE ROLE LimitedCreatorRights;
GO

GRANT CREATE VIEW TO LimitedCreatorRights;
GO

GRANT SELECT ON SCHEMA::dbo TO LimitedCreatorRights;
GO

CREATE USER TestUser WITHOUT LOGIN;
GO

EXEC sp_addrolemember 'LimitedCreatorRights', 'TestUser';
GO

CREATE TABLE dbo.ATest (TestID INT);
GO

В вышеприведенном скрипте мы создаем базу данных с именем “yourdb” и роль с именем “LimitedCreatorRights”. Мы предоставляем роли разрешение на создание представлений и выборку объектов в схеме “dbo”. Мы также создаем пользователя с именем “TestUser” и добавляем его в качестве члена роли “LimitedCreatorRights”.

Теперь давайте посмотрим, что происходит, когда пользователь пытается создать таблицу или представление:

USE yourdb;
GO

-- Это не удастся, так как у TestUser нет разрешений на создание таблицы
EXECUTE AS USER = 'TestUser';
GO

CREATE TABLE dbo.ASecondTable (TestID INT);
GO

REVERT;
GO

-- Это не удастся, так как у TestUser есть права на создание представлений, но нет разрешения на изменение схемы dbo
EXECUTE AS USER = 'TestUser';
GO

CREATE VIEW dbo.AView AS SELECT TestID FROM dbo.ATest;
GO

REVERT;
GO

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

Однако, если мы предоставим разрешение на изменение схемы dbo роли, к которой принадлежит пользователь, создание представления будет успешным:

-- После предоставления разрешения повторно выполните предыдущий оператор CREATE VIEW. Теперь он будет успешным.
GRANT ALTER ON SCHEMA::dbo TO LimitedCreatorRights;
GO

Теперь, если мы повторно выполним оператор CREATE VIEW, он будет успешным, в то время как оператор CREATE TABLE по-прежнему не выполнится:

CREATE VIEW dbo.AView AS SELECT TestID FROM dbo.ATest;
GO

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

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.