사용자와 DB 서버 사이에서 모든 접속과 쿼리를 통제합니다. 장비 한 대가 접속 포트별로 서로 다른 DB를 중계합니다. 접속마다 메일로 승인을 받고, 위험 쿼리는 실행 전에 차단하며, 사용자는 DB 비밀번호를 모른 채 개인계정으로 접속합니다. 모든 쿼리 전문과 승인 이력이 위변조 방지 장치와 함께 기록되고, 월간 점검 리포트가 자동으로 만들어집니다.
에이전트 설치 없이, 네트워크 경로에 게이트웨이를 두는 프록시 방식입니다. SSMS·pgAdmin 등 각 DB의 표준 클라이언트를 그대로 사용하며, 접속 포트로 어느 DB에 연결할지 정해집니다.
개인정보의 안전성 확보조치 기준이 요구하는 DB 접근통제를 하나의 게이트웨이로 충족합니다.
MS-SQL · PostgreSQL · MySQL / MariaDB를 지원합니다. 관리자페이지에서 접속 포트와 DB 종류·대상 서버를 등록하면 게이트웨이가 즉시 그 포트를 열어 중계하므로, 장비 한 대가 여러 DB를 동시에 담당합니다. 승인·차단·금고·감사 기록은 DB 종류와 무관하게 동일하게 적용되고, 서비스마다 다른 DB 계정을 사람별로 매핑할 수 있습니다.
승인 없이는 DB에 접속할 수 없습니다. 접속을 시도하면 승인자에게 메일이 자동 발송되고, 메일에서 “오늘 몇 시까지 사용할지”를 선택해 승인하면 그 시각까지만 접속됩니다. 승인자는 기본이 본인이며(본인 확인·기록), 팀장 승인이 필요한 계정은 승인자를 따로 지정할 수 있습니다.
접속을 종료하거나 무활동으로 세션이 끊기면 그 승인은 즉시 사라져, 다시 접속하려면 재승인을 받아야 합니다. 승인이 계정에 상시 남지 않으므로 자리를 비운 사이의 무단 접속을 막습니다. 관리자는 발급된 접속 권한을 한눈에 보고 즉시 회수할 수 있습니다.
SQL을 정식 구문 분석해 WHERE 없는 DELETE·UPDATE, 위험 명령(xp_cmdshell 등), 금지 객체 접근을 DB에 도달하기 전에 차단합니다. DB 종류별 문법을 각각 분석하므로 PostgreSQL·MySQL의 정상 구문이 오차단되지 않습니다. 의도한 작업은 확인 코드를 붙여 1회 재실행할 수 있습니다.
사용자는 개인계정으로 로그인하고, 게이트웨이가 실제 DB 자격증명을 대신 주입합니다. DB 비밀번호는 AES-256-GCM으로 암호화 보관되며 사용자에게 노출되지 않습니다.
접속·쿼리 전문·승인 부여/회수/거부를 기록하고 레코드를 해시체인으로 연결해 위·변조를 탐지합니다. 대리접속 환경에서도 실행자(개인계정)가 모든 기록에 남아 “누가 무엇을 조회했는지”를 추적할 수 있습니다. 법정 보존기간(1~2년) 보관을 지원합니다.
SSMS는 개체 탐색기를 여는 것만으로 수백 건의 메타데이터 쿼리를 보냅니다(pgAdmin·psql·MySQL 클라이언트도 마찬가지입니다). 구문 분석으로 이를 식별해 감사 기록에서 제외하므로, 사용자가 실제로 실행한 쿼리만 로그에 남아 점검이 쉽습니다. 필요하면 전량 기록으로 전환할 수 있습니다.
대상 월을 고르면 이벤트·일자·시간대별 집계, 사용자별 접속시간(총·평균·최장), 업무시간 외·주말 접속 건수, 접속 PC 목록, 해시체인 무결성 검증 결과가 한 장으로 정리됩니다. 점검자 확인란이 포함되어 그대로 인쇄·PDF 보관할 수 있습니다.
계정 발급·회수, 승인 대기 처리, 발급된 접속 권한, 승인 이력, 사용 로그, 월간 리포트를 웹에서 관리합니다. 회수 즉시 해당 사용자의 접속 세션이 절단됩니다. 관리자 로그인과 접속 IP 화이트리스트로 보호되며, 사내 그룹웨어와 연동할 HTTPS API를 제공합니다.
계정관리 화면에서 버튼 한 번으로 접속 방법(클라이언트 설정·연결 정보), 승인 절차, 이용 규칙을 정리한 안내 메일을 본인에게 보냅니다. 승인 메일 예시 화면이 함께 담겨 있어 별도 교육 없이 바로 사용할 수 있습니다.
2노드 액티브-스탠바이 구성으로 단일 장비 장애 시 수 초 내 자동 절체됩니다. 계정 변경은 노드 간 자동 동기화되고, 무중단 업그레이드를 지원합니다.
클라이언트 구간 TLS를 게이트웨이가 종단해 암호화 접속을 강제합니다. SSMS의 암호화 필수 설정, PostgreSQL 클라이언트의 SSL 모드와 그대로 호환되며, DB 구간 TLS도 선택 적용할 수 있습니다.
지정 컬럼 값을 응답에서 마스킹하고, 임계치를 넘는 대량 조회는 세션을 절단합니다. 무활동 세션은 자동 종료됩니다.
정책에 걸린 쿼리는 차단되는 즉시 승인자에게 메일이 발송됩니다. 승인자가 쿼리 전문과 차단 사유를 확인하고 승인하면 요청자가 10분 내 1회 재실행할 수 있어, 업무를 막지 않으면서 위험 작업만 사람이 확인합니다.
도입 초기에는 차단 없이 기록만 하는 모니터 모드로 운영해 업무 영향 없이 정책을 다듬은 뒤, 실차단으로 전환합니다.
사용자가 받는 승인 메일과, 게이트웨이에 내장된 웹 관리자페이지의 8개 메뉴를 화면별로 정리했습니다. 각 화면이 어떤 일을 하는지 함께 설명합니다.
승인 없이는 접속이 거부되고, 승인자(기본값은 본인)에게 이 메일이 발송됩니다. 어디에서 어느 DB로 들어가려는 요청인지 — 접속 PC, 게이트웨이 진입 지점, DB 종류, 대상 DB 주소, 사용될 DB 계정 — 을 확인한 뒤 오늘 몇 시까지 쓸지를 눌러 승인합니다. 본인이 하지 않은 요청이면 거부 버튼으로 차단하고 기록을 남깁니다.
아래 내용으로 DB 접속이 요청되었습니다. 본인이 요청한 것이 맞으면 사용할 시각을 선택해 승인하세요.
| 요청자 | 홍길동 (hong@example.co.kr) |
|---|---|
| 접속 PC | 10.0.20.31 |
| 접속 지점 | 10.0.10.5:14332 |
| DB 종류 | PostgreSQL |
| 대상 DB | 10.0.30.21:5432 |
| DB 계정 | svc_app |
어떤 DB를 통제할지 정하는 화면입니다. DB 종류(MS-SQL·PostgreSQL·MySQL/MariaDB), 사용자가 접속할 포트, 대상 서버 주소·포트, 대상 구간 TLS 사용 여부를 입력해 등록합니다. 저장하면 게이트웨이가 5초 안에 그 포트를 열어 중계를 시작하며, 다른 포트의 접속 세션은 끊기지 않습니다. 한 대의 게이트웨이가 여러 DB를 동시에 담당하는 근거가 되는 화면입니다.
| 이름 | DB 종류 | 접속 포트 | 대상 DB | 상태 | 메모 | 관리 |
|---|---|---|---|---|---|---|
| 기간계 DB | MS-SQL | 14330 | 10.0.30.11:1433 | 서비스 중 | ERP·회계 | 수정 · 삭제 |
| 분석 DB | PostgreSQL | 14332 | 10.0.30.21:5432 | 서비스 중 | 통계 | 수정 · 삭제 |
| 웹 서비스 DB | MySQL / MariaDB | 14333 | 10.0.30.31:3306 | 서비스 중 | 홈페이지 | 수정 · 삭제 |
사람마다 개인계정(이메일)을 발급하는 화면입니다. 발급 시 개인 비밀번호와 실제 DB 자격증명을 함께 등록하면, 사용자는 DB 비밀번호를 모른 채 개인계정으로 접속하게 됩니다. 승인자를 비우면 본인 승인이고 팀장 승인이 필요하면 다른 주소를 넣습니다. DB 매핑으로 서비스(접속 포트)마다 다른 DB 계정을 지정할 수 있고, 안내 발송은 접속 방법과 이용 규칙을 본인 메일로 보냅니다. 회수하면 그 사용자의 접속 세션이 즉시 끊기며, 발급·회수는 모두 이력으로 남습니다.
| 개인계정 | 성명 | 부서 | 승인자 이메일 | 기본 DB계정 | 서비스별 매핑 | 상태 | 관리 |
|---|---|---|---|---|---|---|---|
| hong@example.co.kr | 홍길동 | 기술연구소 | 본인 승인 | svc_app | :14332 anlz_ro | 정상 | DB 매핑 · 안내 발송 · 회수 |
| kim@example.co.kr | 김철수 | 운영팀 | 본인 승인 | svc_app | — | 정상 | DB 매핑 · 안내 발송 · 회수 |
| lee@example.co.kr | 이영희 | 운영팀 | 팀장 위임 | svc_app | :14333 web_ro | MySQL 재발급 필요 | DB 매핑 · 안내 발송 · 회수 |
| 일시 | 구분 | 내용 |
|---|---|---|
| 08-28 09:12 | 발급 | 개인계정=lee@example.co.kr [운영팀/이영희] | DB계정=svc_app | 처리자=admin |
| 08-26 17:40 | 회수 | 개인계정=park@example.co.kr | 세션 2건 절단 | 처리자=admin |
승인을 기다리는 요청이 모이는 화면입니다. 두 종류가 있습니다 — DB 접속은 승인 없이 접속을 시도했을 때 생기고(요청자 본인 메일로도 승인 링크가 갑니다), 쿼리 실행은 정책에 걸려 차단된 쿼리를 사람이 확인해 달라는 요청입니다. 메일이 나갔는지 여기서 확인할 수 있고, 관리자가 대신 승인하거나 거부할 수 있습니다. 쿼리 승인은 요청자가 10분 내 같은 쿼리를 1회만 재실행할 수 있게 해 줍니다.
| 일시 | 구분 | 요청자 | 내용 | 메일 발송 | 처리 |
|---|---|---|---|---|---|
| 08-28 14:05 | DB 접속 | lee@… | 10.0.20.44 → 10.0.30.21:5432 (PostgreSQL) | 발송됨 | 18시까지 승인 · 거부 |
| 08-28 14:02 | 쿼리 실행 | hong@… | DELETE FROM 고객정보 — WHERE 절 없음 | 발송됨 | 승인 · 거부 |
현재 유효한 접속 승인을 한눈에 보는 화면입니다. 누가 어느 PC에서, 누구의 승인으로, 몇 시까지 접속할 수 있는지와 남은 시간이 표시됩니다. 회수를 누르면 즉시 권한이 사라지고 접속 중인 세션도 끊깁니다. 승인은 종료 시각이 지나거나 접속이 끊기면(정상 종료·무활동 30분 모두) 자동으로 사라지므로, 이 목록은 평소 짧게 유지되는 것이 정상입니다.
| 개인계정 | DB계정 | 접속 PC | 승인자 | 승인 일시 | 종료 시각 | 남은 시간 | 관리 |
|---|---|---|---|---|---|---|---|
| hong@example.co.kr | svc_app | 10.0.20.31 | 본인승인 | 08-28 13:52 | 18:00 | 3시간 41분 | 회수 |
| kim@example.co.kr | anlz_ro | 10.0.20.18 | 본인승인 | 08-28 14:10 | 자정(24시) | 9시간 49분 | 회수 |
접속 승인이 언제 누구에게 주어졌고, 언제 어떤 이유로 사라졌는지를 월별로 조회하는 화면입니다. 구분(부여·회수·거부)과 계정으로 걸러 볼 수 있습니다. 회수 사유가 함께 남기 때문에 세션 종료로 자동 회수된 것인지, 무활동 타임아웃인지, 관리자가 강제로 회수한 것인지 구분됩니다. 고시가 요구하는 권한 부여·말소 이력 보관에 대응하는 화면입니다.
| 일시 | 구분 | 개인계정 | 접속 PC | 내용 |
|---|---|---|---|---|
| 08-28 13:52 | 부여 | hong@… | 10.0.20.31 | 본인승인 · 사용가능 18:00 까지 |
| 08-28 12:40 | 회수 | kim@… | 10.0.20.18 | 세션 종료로 자동 회수 — 재접속 시 재승인 |
| 08-28 11:15 | 회수 | lee@… | 10.0.20.44 | 무활동 30분 타임아웃으로 자동 회수 |
| 08-27 20:03 | 거부 | park@… | 10.0.20.77 | 내가 요청한 것이 아님 (본인 거부) |
실제로 무슨 일이 있었는지 보는 화면입니다. 접속(LOGIN)·쿼리(QUERY)·차단(BLOCK)·대량조회 절단(ROWCUT) 등을 월·유형·계정으로 걸러 조회하며, 실행된 SQL 전문과 실행자(개인계정)·실제 DB 계정이 함께 남습니다. 기본적으로 클라이언트가 자동으로 보내는 메타데이터 쿼리는 빼고 사용자가 직접 실행한 쿼리만 보여 주며, 필요하면 체크박스로 전량 조회할 수 있습니다.
| 일시 | 접속IP | 개인계정 | DB계정 | 유형 | SQL |
|---|---|---|---|---|---|
| 08-28 14:02 | 10.0.20.31 | hong@… | svc_app | BLOCK | DELETE FROM 고객정보 — WHERE 절 없음 |
| 08-28 13:58 | 10.0.20.31 | hong@… | svc_app | QUERY | SELECT TOP 100 * FROM 주문내역 WHERE ... |
| 08-28 13:55 | 10.0.20.18 | kim@… | anlz_ro | QUERY | SELECT 이름, 연락처 FROM 고객 WHERE ... — PostgreSQL(:14332) |
| 08-28 13:50 | 10.0.20.18 | kim@… | anlz_ro | LOGIN | 분석 DB(:14332) · 대리접속 · 승인만료 24:00 |
대상 월을 고르면 한 달치 접속기록이 한 장으로 정리됩니다. 이벤트·일자·시간대별 집계, 사용자별 접속시간(총·평균·최장), 업무시간 외·주말 접속 건수, 접속에 사용된 PC 목록, 그리고 감사로그 해시체인 무결성 검증 결과가 포함됩니다. 점검자 확인란이 있어 그대로 인쇄하거나 PDF로 저장해 보관하면 됩니다. 고시가 요구하는 접속기록 월 1회 점검에 대응하는 화면입니다.
| 개인계정 | 접속 | 접속시간 | 평균 | 업무시간 외 | 쿼리 | 차단 |
|---|---|---|---|---|---|---|
| hong@example.co.kr | 62 | 24시간 8분 | 23분 | 0 | 238 | 5 |
| kim@example.co.kr | 41 | 15시간 3분 | 22분 | 3 | 146 | 2 |
| lee@example.co.kr | 25 | 7시간 1분 | 17분 | 1 | 28 | 0 |
관리자페이지 자체를 지키는 화면입니다. 관리자 아이디·비밀번호를 변경하고(현재 비밀번호 확인 필수), 관리자페이지와 연동 API에 접속할 수 있는 IP 화이트리스트를 관리합니다. 목록을 비우면 전체 허용이 되므로 권장하지 않으며, 이중화 노드나 연동 서버 IP를 지우면 동기화가 끊기니 주의가 필요합니다. 현재 접속 중인 IP를 함께 표시해 실수로 본인을 차단하는 것을 막습니다.
화면은 이해를 돕기 위한 예시 데이터입니다.
개인정보의 안전성 확보조치 기준(개인정보보호위원회 고시)의 DB 접근통제 요건에 대응합니다.
| 고시 요건 | SmartDBMon 기능 |
|---|---|
| 제5조 접근 권한 관리 — 개인별 계정, 권한 부여·말소 이력 3년 보관 | 개인계정 발급/회수(웹 관리)와 이력 자동 기록, 접속 승인 부여·회수·거부 이력(승인자·시각·경로 포함) |
| 제6조 접근 통제 — 미인가 접근 차단, 무활동 세션 종료, 암호화 접속 | 미등록 계정 접속 거부, 승인 없는 접속 차단, 무활동 자동 절단(승인도 함께 회수), TLS 강제 |
| 제8조 접속기록 — 보관(1~2년)·위변조 방지·월 1회 점검 | 쿼리 전문 + 실행자 기록 + 해시체인, 월간 점검 리포트(사용자별 접속시간·업무시간 외 접속·무결성 검증) 자동 생성 |
| (실무) 사전 승인 접근 · 위험쿼리 통제 | 접속 시각 지정 승인(1승인 1접속), 실행 전 차단 + 확인 코드/실시간 승인 예외 통로 |
기존 DB와 클라이언트를 변경하지 않는 구축형 솔루션입니다. 소규모는 미니PC급 장비 2대로 이중화까지 구성됩니다.
DB 서버·사용자 규모·네트워크 경로를 확인하고 장비 사양과 구성(단일/HA)을 정합니다.
설치 스크립트로 게이트웨이·관리자페이지·포털을 구성하고, 통제할 DB를 접속 포트별 서비스로 등록합니다. Linux·Windows를 모두 지원합니다.
차단 없이 기록만 하는 모니터 모드로 운영하며 사용자 계정을 발급하고 정책을 조정합니다.
실차단으로 전환하고, 방화벽에서 게이트웨이 외 DB 직접 접속을 차단해 우회를 봉쇄합니다.
권장 사양: 4코어 · 8GB RAM · SSD 256GB 이상 장비 1~2대(HA) — 사용자 10명·로그 3년 보존 기준. 라이선스는 회사 단위 발급(서명 검증)입니다.