mssql trigger를 사용해보자

HYK·2021년 3월 20일
0

mssql

목록 보기
1/1
post-thumbnail

오늘은 친구가 작게 운영하는 게임의 유저 데이터 베이스를 가지고 재밌는 로그를 만들어보았다.

친구가 원했던 회원들의 ip가 변경될 때의 로그를 어떻게 남기면 좋을까?에 대한 질문에

프로그램 자체를 바꾸는 게 좋지 않을까라고 말했지만 프로그램을 자기가 만든 게 아니라서 건들기 힘들다는 말을 듣고 어쩔 수 없이

트리거를 이용해 유저들의 ip가 변경될 때마다 로그를 찍도록 해보자고 했다.

usertable

Login | IPAddress   | lastLogin           | ...
user1 | 10.10.10.10 | 2021-03-20 10:00:00 | ...

usertable의 IPAddress 열은 그냥 로그인할 때마다 update 되는 형식으로 돼있어서 이전의 어떤 ip에서 접속했는지 볼 수 없었다. 즉 가장 최근의 접속했던 ip만 데이터베이스에 저장되어 있기 때문에 이에 불편함을 느꼈다.
그럼 어떻게 지금부터라도 ip 로그를 수집할 수 있을까??

트리거를 이용해 usertable의 IPAddress 열의 데이터가 업데이트될 때마다 내가 만든 새로운 테이블이 그 정보들이 저장되게 하는 것이다.

  1. 트리거로 저장되는 데이터를 담을 테이블을 만들자
    테이블 이름은 userip
    열의구성은 리스트number ,접속자id ,접속시간 ,접속ip
Create table userip(
uipl int not null PRIMARY KEY,  --리스트넘버
user_id nvarchar(50) not null FOREIGN KEY REFERENCES usertable(Login),
updateday datetime not null, --접속시간
ip nvarchar(15) not null, --접속 ip
)

2.usertable에서의 특정행인 IPAddress이 update 될 때 작동하는 trigger를 작성하자.

CREATE TRIGGER USER_UPDATE_TR ON usertable
for update
as
begin
    if update(IPAddress) --특정컬럼update
        begin
            declare @login nvarchar(40) --임시변수
            declare @ip nvarchar(15) 
            select @login = Login,@ip=IPAddress from INSERTED
            INSERT INTO userip(login,updateday,ip,uipl) 					              values(@login,getdate(),ip,next val for seq_userip) --시퀸스사용
        end
    end
 return

3.결과

매우잘된다😀

profile
Test로 학습 하기

0개의 댓글