Настройка прав доступа SQL
Допустим, есть таблица с данными:

Есть пользователь "User14".
Вопрос: Можно ли настроить права так, чтобы выполняя обычный SELECT, пользователь получал информацию о конкретной организации? Чтобы в будущем каждый пользователь видел только доступную ему информацию в общей таблице.
Microsoft SQL Server 2012 (SP4-GDR) (KB4583465) - 11.0.7507.2 (X64)
Nov 1 2020 00:48:37
Copyright (c) Microsoft Corporation
Standard Edition (64-bit) on Windows NT 6.2 (Build 9200: )
(Hypervisor)
Ответы (1 шт):
Существует довольно часто используемая практика выдачи результатов не напрямую из таблиц, а с помощью процедур/функций (в зависимости от СУБД). Т.е. изначально делать выборку (SELECT) не из таблицы, а из функции, в которую, как вариант, можно передать параметр USER_ID, и в зависимости от преданного значения можно выдавать не только надлежащие строки, но и поля/столбцы.
К примеру, есть поле, содержимое которого доступно только пользователю А. При выборке из функции пользователем А в этом поле будут значения. Пользователю Б содержимое этого поля недоступно, соответственно, содержимое этого поля будет NULL.
В SQL SERVER это решается через функции, возвращающие табличные значения (ITVF).
В ORACLE DATABASE, как вариант, можно использовать конвейерные (PIPELINE) функции.
В обоих случаях пользователям не нужны права на SELECT из этой таблицы. Нужны только права на EXECUTE этой функции.
Таким образом, решается не только Ваша задача, но и закрывается возможная дырка в безопасности при получении сведений из таблицы напрямую - обычным SELECT'ом, прав на который ни у одного пользователя не будет.