我需要限制对属于RegionID
1的行的访问。不知道如何创建谓词函数来满足谓词函数中的此条件?我什至尝试将0&1硬编码为return语句,但它仍然返回所有内容,不进行任何过滤。
我可能做错了什么?
下面的一个甚至不会编译。我也尝试了Case语句,它可以编译,但不过滤就返回所有内容。
CREATE FUNCTION RLS.fn_RegionLimit(@RegionID int)
RETURNS table
with schemabinding
AS
IF @RegionID=1
RETURN 1
ELSE
RETURN 2
create security policy rls.PatientsSecurityPolicy
ADD Filter PREDICATE RLS.fn_RegionLimit(RegionID) on dbo.TestOrder
WITH (STATE=ON)
Select * from dbo.TestOrder
这仅适用于某些用户吗?您是否不想仅将其应用于某些用户或角色?这听起来有点危险。
要记住的是,安全功能是一个表值功能,因此您必须以这种方式进行编码。这里有几个例子在这里。
我已经基于此安全功能设计了一个示例:
CREATE FUNCTION dbo.fn_securitypredicate( @regionId INT )
RETURNS TABLE
WITH SCHEMABINDING
AS
RETURN
SELECT 1 AS fn_securitypredicate_result
WHERE @regionId = 1
OR IS_SRVROLEMEMBER( N'sysadmin' ) = 1;
GO
这将限制应用于除sysadmins之外的所有其他人,我已将其添加为安全条件。我已经发布了完整的脚本要点,您可以在此处查看。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句