SQL 쿼리 체계

정책 서버는 SQL 쿼리 체계를 사용하여 관계형 데이터베이스에서 사용자 데이터를 찾는 쿼리를 작성합니다. SQL 쿼리 체계를 생성하고 편집하려면 "SQL 쿼리 체계" 대화 상자를 사용하십시오.
casso126kkr
정책 서버는 SQL 쿼리 체계를 사용하여 관계형 데이터베이스에서 사용자 데이터를 찾는 쿼리를 작성합니다. SQL 쿼리 체계를 생성하고 편집하려면 "SQL 쿼리 체계" 대화 상자를 사용하십시오.
2
참고:
열 이름의 "SM_"은 특수 이름에 사용하도록 예약된 접두사입니다. 사용자 디렉터리의 열 이름은 "SM_" 접두사로 시작하지 마십시오.
SQL 쿼리 체계 구성
사용자 저장소 관계형 데이터베이스에서 사용자 데이터를 찾는 SQL 쿼리 체계를 구성하십시오.
다음 단계를 수행하십시오.
  1. "인프라", "디렉터리"를 차례로 클릭합니다.
  2. "SQL 쿼리 체계"를 클릭합니다.
  3. "SQL 쿼리 체계 만들기"를 클릭합니다.
  4. "새 개체 만들기" 옵션이 선택되어 있는지 확인하고 "확인"을 클릭합니다.
  5. "일반" 영역의 필드에 이름과 설명을 입력합니다.
  6. 데이터베이스 스키마에 맞게 쿼리 필드 내용을 업데이트합니다.
    관계형 데이터베이스에서 작동하도록 각 쿼리를 구성합니다. 다음 데이터베이스 테이블 및 열 이름을 관계형 데이터베이스의 테이블 및 열 이름으로 바꿉니다.
    • 이름
      사용자에 대한 Name 매개 변수는 고유합니다.
    • SmUser - 테이블
    • SmGroup - 테이블
    • 암호
    • SmUserGroup - 테이블
    • ID
    • UserID
    • FirstName
    • LastName
    • TelephoneNumber
    • EmailAddress
    • Mileage
    • PIN
    • GroupID
    • 사용되지 않음
  7. 쿼리 유형을 선택하고 "제출"을 클릭합니다.
    쿼리가 저장됩니다. 쿼리 체계를 사용자 디렉터리 연결과 연관시킬 수 있습니다.
  8. 정책 서버를 다시 시작합니다.
ODBC 사용자 디렉터리 연결에 SQL 쿼리 체계 추가
"사용자 디렉터리" 대화 상자를 사용하여 SQL 쿼리 체계를 선택하십시오.
다음 단계를 수행하십시오.
  1. 기존 사용자 디렉터리 연결 개체에 대한 "사용자 디렉터리" 창을 엽니다.
  2. "SQL 쿼리 체계" 목록에서 SQL 쿼리 체계를 선택하고 "제출"을 클릭합니다.
  3. 정책 서버 관리 콘솔을 사용하여 정책 서버를 다시 시작합니다.
참고:
쿼리가 아포스트로피 문자(예: O’Neil)를 포함하는 이름을 반환하는 경우 쿼리 문자열의 모든 ‘%s’ 인스턴스를 ‘’%s’’로 바꾸십시오. 이 문제를 방지하려면 아포스트로피가 포함되지 않은 사용자 ID로 쿼리를 작성하거나 '%s'가 포함된 쿼리 문자열을 수정하십시오.
저장 프로시저를 사용한 인증을 위해 SQL 쿼리 체계 구성
ODBC 사용자 디렉터리에 대한 인증에 저장 프로시저가 필요한 경우 저장 프로시저를 호출하도록 SQL 쿼리 체계를 구성하십시오. 사용 중인 데이터베이스 유형에 적절한 구문을 사용하여 SQL 쿼리 체계를 구성하십시오.
참고
: 레코드 집합 결과를 반환하는 저장 프로시저를 사용하려면 프로시저 반환 결과를 사용하도록 설정하십시오. EncryptPW에는 이 작업이 필요하지 않습니다.
 
SQL Server
구문:
Call
Procedure_Name
%s , %s
예:
Call EncryptPW %s, %s
SQLServer의 저장 프로시저는 다음 요구 사항을 충족해야 합니다.
  • 첫 번째 매개 변수는 사용자 이름이어야 하고 두 번째 매개 변수는 암호여야 합니다.
  • 모든 매개 변수는 OUT 키워드를 사용하여 정의되어야 합니다.
  • 저장 프로시저가 정수 값을 반환해야 합니다.
다음 예에서는 SQLServer 사용자 디렉터리에 사용할 저장 프로시저를 생성하는 방법을 보여 줍니다.
CREATE PROCEDURE EncryptPW @UserName varchar(20) OUT , @PW varchar(20) OUT AS SELECT Smuser.name from Smuser where Smuser.name= @UserName and password = @PW SELECT Smuser.password from Smuser where name= @UserName and password = @PW return 0
MySQL
구문:
Call
Procedure_Name
%s, %s
예:
Call EncryptPW %s, %s
MySQL의 저장 프로시저는 다음 요구 사항을 충족해야 합니다.
  • 첫 번째 매개 변수는 사용자 이름이어야 하고 두 번째 매개 변수는 암호여야 합니다.
  • 저장 프로시저가 값을 반환하지 않아야 합니다.
다음 예에서는 MySQL 사용자 디렉터리에 사용할 저장 프로시저를 생성하는 방법을 보여 줍니다.
DELIMITER// CREATE PROCEDURE EncryptPW(INOUT p_UserName varchar(20), INOUT p_PW varchar(20)) BEGIN SELECT SmUser.Name into p_UserName from test.SmUser where SmUser.Name = p_UserName and SmUser.Password = p_PW; SELECT SmUser.Password into p_PW from test.SmUser where SmUser.Name = p_UserName and SmUser.Password = p_PW; END; // DELIMITER;
Oracle 함수
구문:
Call
Procedure_Name
%s , %s
Oracle 사용자 디렉터리의 경우 아래의 템플릿을 사용하여 다음 함수를 생성하십시오.
  • EncryptPW
  • ChangePW
Oracle 함수의 저장 프로시저는 다음 요구 사항을 충족해야 합니다.
  • 첫 번째 매개 변수는 사용자 이름이어야 하고 두 번째 매개 변수는 암호여야 합니다.
EncryptPW 함수
EncryptPW 함수는 다음과 같이 정수 값을 반환해야 합니다.
  • 값 0은 성공을 나타냅니다.
  • 값 1은 실패를 나타냅니다.
다음 템플릿을 사용하여 EncryptPW 함수를 생성할 수 있습니다.
CREATE OR REPLACE FUNCTION EncryptPW(p_UserName IN OUT SmUser.Name%type, p_PW IN OUT SmUser.Password%type) RETURN INTEGER IS nRet INTEGER :=1; nCount NUMBER := 0; BEGIN select count(*) into nCount from SmUser where SmUser.Name = p_UserName and SmUser.Password = p_PW; IF (nCount = 1) THEN SELECT SmUser.Name into p_UserName from SmUser where SmUser.Name = p_UserName and SmUser.Password = p_PW; SELECT SmUser.Password into p_PW from SmUser where SmUser.Name = p_UserName and SmUser.Password = p_PW; RETURN 0; END IF; RETURN nRet; END EncryptPW; /
ChangePW 함수
ChangePW 함수는 다음과 같이 정수 값을 반환해야 합니다.
  • 값 1은 성공을 나타냅니다.
  • 값 0은 실패를 나타냅니다.
다음 템플릿을 사용하여 ChangePW 함수를 생성할 수 있습니다.
CREATE OR REPLACE FUNCTION ChangePW(p_PW IN SmUser.Password%type, p_UserName IN SmUser.Name%type) RETURN INTEGER IS nRet INTEGER :=1; nCount NUMBER := 0; BEGIN select count(*) into nCount from SmUser where SmUser.Name = p_UserName; IF (nCount = 1) THEN UPDATE SmUser SET SmUser.Password = p_PW where SmUser.Name = p_UserName; COMMIT; RETURN 0; END IF; END ChangePW; /
장애 조치 및 연결 풀링 중 비동기 호출 지원
동기 호출은 요청이 완료된 경우에만 반환됩니다. 비동기 호출은 즉시 반환됩니다. 네트워크 오류와 관련된 지연을 방지하기 위해 호출자는 비동기 호출을 중지할 수 있습니다.
다음과 같은 데이터베이스로 비동기 호출을 보낼 수 있습니다.
  • SQLServer
  • Windows NT 및 Solaris의 Oracle 8 - Oracle 11g
비동기 호출 지원 구성
다음 레지스트리 옵션은 레지스트리 하위 키
Netegrity\SiteMinder\CurrentVersion\Database
아래에 저장됩니다.
  • AsynchronousCalls
    데이터베이스 호출이 비동기적으로 수행되는지 여부를 결정합니다.
    : 0(아니요), 1(예)
    기본값
    : 0
  • AsynchronousSleepTime
    각 호출 사이에서 미해결 SQL 호출의 상태를 확인하기 전까지 대기하는 시간을 지정합니다.
    : 0~n 밀리초
    기본값
    : 15 밀리초
  • LoginTimeout
    한 연결에서 데이터베이스에 로그인할 때까지 허용되는 시간입니다.
    : 최소 1초
    기본값
    : 15초
  • QueryTimeout
    쿼리가 취소되기 전까지 쿼리를 완료하는 데 허용되는 시간입니다.
    : 최소 1초
    기본값
    : 15초
참고:
Windows NT에서 SQL Server를 실행하는 경우 비동기 호출 지원으로 인해 약간의 메모리 누수가 발생할 수 있습니다. 네트워크 상태가 안정적이지 않은 경우 설정을 조정하여 만료 시간을 늘리고 장애 조치 횟수를 줄일 수 있습니다.
ODBC 연결 풀링
ODBC 연결 풀링에는 다음 조건이 적용됩니다.
  • ODBC 데이터 원본이 연결을 풀링합니다. 여러 디렉터리가 데이터 원본을 사용하는 경우, 사용 가능한 연결 수는 디렉터리 및 저장소의 전체 수에 도달할 수 있습니다. 정책 저장소는 데이터 원본을 사용해야 하고, 정책 저장소의 또 다른 저장소는 데이터 원본을 사용해야 합니다.
  • SQL Server의 연결 공유 방식은 Oracle의 경우보다 제한적입니다. 두 호출자는 열려 있는 결과 집합을 공유할 수 없습니다. 동시 활동은 제한되며, 특히 다중 프로세서 컴퓨터에서 제한됩니다. 연결 수를 늘리면 일반적으로 동시성이 개선됩니다.
  • Oracle에서는 여러 호출자가 하나의 연결을 공유하는 것이 허용되지만 내부적으로 호출이 직렬화될 수 있습니다.
  • 연결을 공유되면 많은 활성 요청이 여러 개이면 풀에 있는 연결 간에 요청이 분산됩니다.
  • 정책 서버가 중단되면 열려 있는 연결이 종료됩니다.