Я ограничил выбор доступа на уровне таблицы на сервере sql. Но пользователи могут получить доступ к представлениям, которые созданы в верхней части этой таблицы. - PullRequest
0 голосов
/ 23 апреля 2020

Я ограничил выбор доступа на уровне таблицы для одной таблицы «A'in sql server (2016)». Но пользователи могут получить доступ к представлениям, которые созданы в верхней части этой таблицы «A».

, когда пользователи запускают оператор выбора в таблице «A» (выберите * из таблицы «A»), пользователи получают «разрешение на выбор Отказано в сообщении таблицы объектов «A». когда пользователи запускают оператор выбора в представлении (выберите * в представлении «А»), пользователи могут получить доступ ко всем данным.

Пользователи могут создавать новые представления, записывая оператор выбора в таблицу «А».

Как я могу ограничить пользователям доступ к таблице «А» также из представлений.

1 Ответ

1 голос
/ 23 апреля 2020

Это ожидаемое поведение из-за цепочки владения. Разрешения для таблиц, на которые ссылается представление, не проверяются, если представление и таблицы имеют одного и того же владельца (AUTHORIZATION).

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

--move table to different schema
CREATE USER RestricedTablesOwner WITHOUT LOGIN;
GO
CREATE SCHEMA RestricedTables AUTHORIZATION RestricedTablesOwner;
GO
ALTER SCHEMA RestricedTables TRANSFER dbo.A;
GO

--change table to different owner, retaining same schema
ALTER AUTHORIZATION ON OBJECT::dbo.A TO RestricedTablesOwner;
...