我有一张大表,里面有很多数据,需要一些 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
但它不起作用的语句。而且我不知道我们是否可以在 switch 中返回过滤。
我的尝试:
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
任何帮助表示赞赏