Я реализую безопасность RBAC-RLS в своей базе данных, и у меня есть вопрос. Вот сценарий:
У меня есть функция с одним входным параметром @PermissionId
, который проверяет, есть ли у зарегистрированного пользователя такая привилегия. Каждая роль в базе данных связана с несколькими разрешениями, и у каждого пользователя может быть несколько ролей.
Допустим, у меня есть таблица Products
, и я хочу, чтобы только пользователи с разрешением ReadProducts
могли просматривать содержимое таблицы.
CREATE SECURITY POLICY ReadProducts
ADD FILTER PREDICATE HasPermission('ReadProducts') ON Products
И это нормально, но теперь у меня тоже есть Разрешение SystemAdministrator
и ему тоже нужно иметь права на просмотр содержимого таблицы Products
.
Если я добавлю другую политику
CREATE SECURITY POLICY ReadProducts
ADD FILTER PREDICATE HasPermission('SystemAdministrator') ON Products
Будет ли это работать так, как предполагается, или будет конфликт между двумя политиками?
Или другая ситуация, что, если я добавлю еще один предикат фильтра в первую политику. Так что это будет так:
CREATE SECURITY POLICY ReadProducts
ADD FILTER PREDICATE HasPermission('ReadProducts') ON Products
ADD FILTER PREDICATE HasPermission('SystemAdmin') ON Products
Будет ли это хорошо? Я имею в виду, если у меня как у пользователя есть одна из этих двух привилегий, смогу ли я увидеть содержимое таблицы Products
?