[sql] SQL 데이터베이스에서 로그인한 사용자의 접속 기록 확인 방법

SQL 데이터베이스에서 로그인한 사용자의 접속 기록을 확인하는 방법을 알아보겠습니다.

1. sys.dm_exec_sessions 뷰 사용하기

SQL Server에서는 sys.dm_exec_sessions 뷰를 사용하여 현재 세션 정보를 확인할 수 있습니다. 이를 이용하여 로그인한 사용자의 접속 정보를 확인할 수 있습니다.

다음은 sys.dm_exec_sessions 뷰에서 로그인한 사용자의 접속 기록을 확인하는 쿼리 예제입니다.

SELECT login_name, host_name, program_name, login_time
FROM sys.dm_exec_sessions
WHERE is_user_process = 1
ORDER BY login_time DESC;

위의 쿼리는 sys.dm_exec_sessions 뷰에서 is_user_process 열이 1인 세션 정보를 가져와서 로그인한 사용자의 접속 기록을 로그인 시간 기준으로 내림차순으로 정렬하여 보여줍니다. login_name은 로그인 사용자의 이름, host_name은 접속한 호스트 이름, program_name은 접속한 프로그램 이름을 나타냅니다.

2. 로그 테이블 생성하여 기록하기

또 다른 방법은 로그인 성공 시 로그 테이블에 기록하는 방법입니다. 로그인 성공 이벤트를 감지하기 위해 로그인 트리거를 생성하고, 로그 테이블에 기록하는 방식입니다.

다음은 로그인 성공 시 로그 테이블에 기록하는 예제입니다.

CREATE TABLE LoginLog (
    ID INT IDENTITY(1,1) PRIMARY KEY,
    login_name NVARCHAR(100),
    login_time DATETIME,
);

CREATE TRIGGER LoginTrigger
ON ALL SERVER
FOR LOGON
AS
BEGIN
    IF ORIGINAL_LOGIN() <> 'sa'
    BEGIN
        INSERT INTO LoginLog (login_name, login_time)
        VALUES (ORIGINAL_LOGIN(), GETDATE());
    END
END;

위의 예제는 LoginLog 테이블을 생성하고, LoginTrigger 트리거를 생성하여 로그인 성공 시 해당 정보를 LoginLog 테이블에 기록합니다. 기록되는 정보에는 로그인 사용자의 이름(login_name)과 로그인 시간(login_time)이 포함됩니다.

로그 테이블을 사용하면 로그인 기록을 보다 유연하게 관리할 수 있으며, 필요한 모든 정보를 기록할 수 있습니다.

참고 자료