2016-12-07 5 views
1

목표는 사용자의 암호 양을 가져와 회사의 규칙과 비교하는 것입니다. 그들이 허용하는 숫자를 초과하면 새로운 날짜를 삽입하고 마지막 날짜를 삭제합니다 (또는 마지막 하나를 삭제 한 다음 새 것을 삽입합니다.) 나는 정직하게도 아직 어느 방향으로 가고 싶은지 알았습니다.다른 저장 프로 시저를 호출하는 저장 프로 시저가 부분 이름별로 열을 필터링 한 다음 두 번째 SP의 반환 수를 열 양과 비교합니다.

나는 두 개의 저장 프로 시저가 : 그 양을 필요로하기 때문에 Delete_Oldest_Password_And_DateNumber_Of_Passwords

Delete_Oldest_Password_And_Date 전화 Number_Of_Passwords합니다.

저는 저장 프로 시저의 시작이 좋습니다. 하반기, @Temp_Password_Table으로 시작합니다.

CREATE Procedure Delete_Oldest_Password_And_Date 
    @ua_pk uniqueidentifier 
AS 
    DECLARE @Temp_Table table 
    (
     numberOfPasswords INT 
    ) 

    INSERT INTO @Temp_Table 
    EXEC Number_Of_Passwords @ua_pk 
    SELECT *  
    FROM 
     @Temp_Table 

    DECLARE @Temp_Password_Table table 
    (
    password varchar(max) 
    ) 

    SELECT * 
    FROM User_Passwords 
    WHERE User_Passwords.ua_fk = @ua_pk 
    AND up_Password LIKE '%Password%' 

GO 

GRANT EXEC ON Delete_Oldest_Password_And_Date TO WEB 

GO 

아직 삭제가 걱정되지 않습니다. 나는 정확한 정보를 먼저 얻는 것에 대해 더 걱정한다.

User_Passwords는 사람마다 동적입니다. 계획 (아직이 부분에 익숙하지 않은)은 최신 항목을 "up_Password1"열에 넣은 다음 두 번째 열을 "up_Password2"열에 넣는 것입니다.

+1

죄송합니다. 정정! –

+0

Number_of_Passwords에서 반환되는 값은 하나입니까? INT 값이 INT 변수가 아닌 테이블 변수가 될 때마다 하나의 INT 값이 될 것입니다. 그렇다면 IF/ELSE 블록을 더 깨끗하게 사용할 수 있습니다. – scsimon

+0

안녕하세요! 예, 하나의 값, 한 필드 (셀)의 INT –

답변

1

다음은 사용자가 가지고있는 암호의 수이며 Max # ofPasswords-1이 생길 때까지 가장 오래된 암호를 삭제하여 기록 암호의 수에 대한 정책을 계속 준수하는 새로운 암호를 설정합니다. proc 디렉토리는 다음 표를 가정

CREATE TABLE dbo.User_Passwords(
    ua_fk UNIQUEIDENTIFIER, 
    password_hash NVARCHAR(100), 
    start_date DATETIME, 
    end_date DATETIME) 

Password_hash는 같은 암호 열을 저장하기로 결정 무엇이든 될 수있다 (여기 일반 텍스트로 실제 암호를 저장하지 마십시오).

CREATE Procedure Delete_Oldest_Password_And_Date 
    @ua_pk uniqueidentifier 
AS 
    DECLARE @numberOfPasswords INT, 
      @MaxPasswordNum INT = 10 

    SELECT @numberOfPasswords = COUNT(*)  
    FROM User_Passwords 
    WHERE ua_fk = @ua_pk 

    IF @numberOfPasswords >= @MaxPasswordNum 
    BEGIN 
     WITH T 
     AS (SELECT TOP (@numberOfPasswords - (@MaxPasswordNum-1)) * 
      FROM User_Passwords 
      WHERE ua_fk = @ua_pk 
      ORDER BY end_date ASC) 
     DELETE FROM T; 
    END 

GO 
+0

설명을 위해 사용자가 5 개의 비밀번호를 가지고있는 경우이 스키마를 사용하는 User_Passwords에 5 개의 다른 레코드가 있습니다. –

+0

우수! ..... 나는 비틀 거리고 싶었 기 때문에 실제로 삭제를 추가하기를 원하지 않았지만 고마워! –