У меня есть большая таблица с большим количеством данных, которым требуется защита RLS.
RLS основан на другой таблице (логины пользователей с номером профиля).
Я должен сделать другую логику фильтрации в зависимости от номера профиля ...
Скажем, если userProfile равен 1, он может видеть все данные.
Если в профиле пользователя 2, он может видеть только данные, основанные на colA
, если он 3, то colB
должны быть проверены.
Пример:
Profile | login Data | colA | colB
2 | toto data | toto | tutu
3 | tutu data | tata | tutu
Я пытался создать оператор Switch
на основе profileType
, но он не работает. И я не знаю, сможем ли мы вернуть фильтр в коммутаторе.
Моя попытка:
CREATE FUNCTION [dbo].[fn_rls_users](@username AS VARCHAR(50))
RETURNS TABLE
with schemabinding
AS
RETURN (
SELECT Department,ProfileType,
CASE
WHEN ProfileType = 1 THEN
RETURN (
SELECT 1 AS [fn_rls_users]
FROM BIG_TABLE
)
WHEN ProfileType = 2 THEN
RETURN (
SELECT 1 AS [fn_rls_users]
FROM BIG_TABLE
WHERE Department = Department
)
ELSE (
SELECT 0 AS [fn_rls_users]
FROM BIG_TABLE
)
END
FROM dbo.UserProfiles WHERE UserLogin = @username
)
GO
Любая помощь приветствуется