, 나는 주어진 행에 걸쳐 읽기 권한이 있어야 여러 사용자를 가질 수 SQL Server의 행 수준 보안을 구현하기 위해 노력하고, 언제 해요
나는 성능이 매우 매우 나 빠지게되는 술어에 복잡한 조건을 씁니다.
테이블의 한 열에 모든 사용자 이름을 유지하고 SYSTEM_USER
을 검색하기 위해 술어에서 % LIKE %
으로 검색하려고했지만 성능이 낮습니다. 하나 개의 로우 내 제어 테이블의 사용자 이름 열에서 값
예 :
CREATE FUNCTION fn_securitypredicate(@Usernames AS nvarchar(4000))
RETURNS TABLE
WITH SCHEMABINDING
AS
RETURN
SELECT 1 as Result
WHERE @Usernames LIKE '%' + SYSTEM_USER + '%'
2 초 50되었다으로 현재 실행 시간 : 여기
domain\john.wick;domain\red.eagle;domain\spartak.something....
내 함수 비서. 개선을위한 제안.
CREATE SECURITY POLICY [Policy]
ADD FILTER PREDICATE [fn_securitypredicate]([Usernames])
ON [dbo].[Products];
1. 코드 2를 게시하십시오. % ... %와 (과) 같이 어떤 성능을 얻을 수 있습니까? 정확히 일치 검색을 해보시겠습니까? – sepupic
자세한 내용과 코드를 추가했습니다. –
좋아, 내 질문은 여전히, 왜 당신은 정확한 일치를 사용하지 않습니다? WHERE @ Usernames = SYSTEM_USER ' – sepupic