보안
자격 증명이 저장되는 곳
Mac
비밀번호, 키의 암호 문구, AI 제공업체의 API 키와 라이선스 키는 macOS 키체인에 저장됩니다. 디스크의 연결 목록에는 비밀번호가 없으며, SSH 키는 디스크의 파일로 그대로 남습니다.
iPhone 및 iPad
비밀번호와 붙여 넣은 SSH 키는 키체인에 저장됩니다.
iCloud Sync
iCloud Sync는 사용자가 켤 때까지 꺼져 있습니다. 레코드는 본인의 iCloud 계정 내 비공개 데이터베이스로 전송되며, TablePro는 읽을 수 없고 비밀번호도 포함되지 않습니다. 비밀번호는 Mac의 암호(Passwords) 또는 iPhone·iPad의 암호 동기화(Sync Passwords)를 추가로 켜야 동기화되며, 이때 iCloud 키체인을 거칩니다.
TablePro가 받는 것
실행한 쿼리, 그 결과와 비밀번호는 TablePro로 전송되지 않습니다. 예외는 직접 게시하기로 한 Team Library로, 연결 설정과 저장된 쿼리를 받지만 비밀번호는 받지 않습니다.
알아둘 제한 사항
- Mac에서는 비밀번호 동기화가 AI 제공업체의 API 키와 라이선스 키도 함께 동기화합니다.
- 1Password나 셸 명령 같은 비밀번호 소스는 연결할 때마다 Mac에서 프로그램을 실행합니다.
기기 밖으로 나가는 것
내 서버와 제공업체로
쿼리와 결과는 앱과 본인의 데이터베이스 서버 사이에서만 오가며 TablePro를 거치지 않습니다. AI 요청은 추가한 제공업체로 바로 전송됩니다.
TablePro로
라이선스를 활성화하지 않으면 Mac 앱이 TablePro에 보내는 요청은 하루 한 번의 사용 보고서뿐입니다. 기본적으로 켜져 있으며 설정에서 끌 수 있습니다. iPhone 및 iPad는 Share Usage Data를 켜지 않으면 TablePro에 아무것도 보내지 않습니다. 보고서에는 호스트 이름, 사용자 이름, 비밀번호, 쿼리 또는 행 데이터가 포함되지 않으며, 두 앱 모두 충돌 보고 도구나 서드파티 분석 라이브러리가 없습니다.
알아둘 제한 사항
- Mac 앱은 첫 사용 보고서를 묻지 않고 보내며, 서버는 모든 보고서와 라이선스 확인의 IP 주소를 저장합니다.
앱이 전달되는 방식
서명과 공증
Mac 빌드는 Developer ID로 서명되고 Hardened Runtime을 사용하며 Apple의 공증을 받습니다. 디스크 이미지는 GitHub Releases에 있으며 각각 SHA-256 체크섬이 있습니다. Homebrew cask는 같은 이미지를 내려받아 SHA-256을 확인합니다.
업데이트
Mac 앱은 Sparkle로 업데이트하며, 설치 전에 각 업데이트의 EdDSA 서명을 앱에 포함된 공개 키로 검증합니다. 이 검증은 끌 수 없습니다. 자동 업데이트는 설정이나 구성 프로필에서 끌 수 있습니다.
드라이버 플러그인
Mac 앱에 포함되지 않은 드라이버는 GitHub에서 내려받습니다. 각 드라이버는 플러그인 레지스트리의 SHA-256과 일치하고 유효한 코드 서명이 있어야 합니다. 서명은 TablePro 자체의 것이거나, 사용자가 이름을 보고 신뢰하기로 동의한 다른 개발자의 Developer ID입니다.
iPhone 및 iPad
iPhone 및 iPad 앱은 App Store에서 배포되며 업데이트도 App Store가 전달합니다. 드라이버가 내장되어 있어 플러그인을 내려받지 않습니다.
알아둘 제한 사항
- Mac 앱은 macOS App Sandbox를 사용하지 않으며, 사용자 계정이 가진 파일 및 네트워크 접근 권한으로 실행됩니다.
- 드라이버 플러그인은 TablePro의 일부로 실행되며 사용자가 여는 모든 연결의 자격 증명을 읽을 수 있습니다.
실수로부터 데이터베이스를 지키는 장치
Safe Mode 수준
각 연결에는 Silent, Alert, Alert (Full), Safe Mode, Safe Mode (Full) 및 Read-Only 중 하나의 Safe Mode 수준이 있습니다. Alert는 쓰기 전에 확인하고, Safe Mode 수준은 Touch ID나 Mac 비밀번호도 요구하며, Full 수준은 읽기 전에도 확인하고, Read-Only는 쓰기를 거부합니다. 조직은 구성 프로필로 소속 Mac에 최소 수준을 강제할 수 있습니다. iPhone 및 iPad의 수준은 Off, Confirm Writes 및 Read-Only입니다.
파괴적 명령문
Mac의 모든 수준에서 DROP, TRUNCATE 및 WHERE 없는 DELETE는 멈추고 먼저 확인하며, 명령문 전체를 보여 줍니다.
알아둘 제한 사항
- Safe Mode는 TablePro 안에서 작동하며 실수를 막아 줍니다. 샌드박스나 권한 시스템은 아닙니다. 반드시 지켜야 하는 규칙에는 데이터베이스 자체의 권한을 사용하세요.
- 새 연결은 Silent로 시작하며, WHERE 없는 UPDATE를 포함해 명령문을 그대로 실행합니다.
- 채팅의 Edit 및 Agent 모드에서는 AI 어시스턴트가 명령문을 실행할 수 있으며, Silent에서는 쓰기가 확인 없이 실행됩니다. 창 전체를 쓰는 Agent mode는 연결을 Alert 이상으로 유지하지만, 이는 알림이지 잠금이 아닙니다.
MCP 서버
로컬 전용
MCP 서버는 Mac 앱에만 있으며, 직접 켜거나 설정한 클라이언트가 시작하기 전까지 꺼져 있습니다. 127.0.0.1에서 수신하고 원격 모드가 없으며, 클라이언트는 비밀번호를 볼 수 없습니다.
클라이언트 승인 방식
기본적으로 모든 요청에는 범위(Read Only, Read & Write 또는 Full Access)가 지정된 토큰이 필요하며, 클라이언트가 연결에 처음 접근하면 Mac의 대화상자에서 확인합니다.
클라이언트가 할 수 있는 일
외부 클라이언트에 허용할 작업은 연결마다 Blocked, Read Only(기본값), Read & Write 중에서 정합니다. 쓰기는 여전히 해당 연결의 Safe Mode 수준을 거치고, DROP과 TRUNCATE에는 Full Access 토큰과 매번 승인이 필요하며, 모든 호출은 Mac에 기록됩니다.
알아둘 제한 사항
- 127.0.0.1는 서버가 수신하는 위치일 뿐, 누가 접근할 수 있는지를 뜻하지 않습니다. Mac의 모든 프로그램이 연결할 수 있으며, claude.ai나 app.cursor.com에서 연 페이지도 마찬가지입니다. 모두 토큰이 필요하므로 인증 필수 설정을 켜 두세요.
- 클라이언트는 읽은 내용을 자체 AI 서비스로 보내며, 해당 서비스의 약관이 적용됩니다.
오픈 소스
공개된 코드
두 앱 모두 유료 기능 코드를 포함해 AGPLv3 오픈 소스입니다. 이 페이지에서 설명하는 내용은 각 릴리스에 서명하고 공증하는 스크립트와 함께 저장소에서 확인할 수 있으며, Mac 앱을 직접 빌드할 수도 있습니다.
취약점 신고
신고 방법
[email protected]로 이메일을 보내거나 GitHub에서 비공개로 신고하세요. 영어나 베트남어로 작성하면 됩니다. 취약점에 대해서는 공개 issue, discussion 또는 pull request를 열지 마세요.
포함할 내용
영향을 받는 대상과 버전(Mac 앱, iPhone 및 iPad 앱, 플러그인 또는 이 웹사이트)을 알려 주세요. macOS 또는 iOS 버전, 드라이버가 관련된 경우 데이터베이스 유형, 재현 단계나 개념 증명, 공격자가 얻는 것도 함께 적어 주세요.
보안 수정 대상 버전
각 앱과 플러그인의 최신 릴리스만 보안 수정을 받습니다. 신고하기 전에 최신 릴리스에서도 문제가 있는지 확인하세요.