Bảo mật
Thông tin đăng nhập được lưu ở đâu
Trên Mac
Mật khẩu, passphrase của key, API key của nhà cung cấp AI và license key được lưu trong Keychain của macOS. Danh sách connection trên đĩa không chứa mật khẩu, còn SSH key vẫn là một file trên đĩa.
Trên iPhone và iPad
Mật khẩu và SSH key dán vào được lưu trong Keychain.
iCloud Sync
iCloud Sync tắt cho tới khi bạn bật. Dữ liệu đồng bộ được lưu vào một cơ sở dữ liệu riêng tư trong tài khoản iCloud của chính bạn, nơi TablePro không đọc được, và không chứa mật khẩu. Mật khẩu chỉ được đồng bộ nếu bạn bật thêm mục Mật khẩu (Passwords) trên Mac hoặc Đồng bộ mật khẩu (Sync Passwords) trên iPhone và iPad, và khi đó đi qua iCloud Keychain.
TablePro nhận được gì
Các query bạn chạy, kết quả trả về và mật khẩu của bạn không được gửi cho TablePro. Ngoại lệ là Team Library mà bạn chủ động xuất bản lên: nơi này nhận cấu hình connection và query đã lưu, không bao giờ gồm mật khẩu.
Giới hạn nên biết
- Trên Mac, tính năng đồng bộ mật khẩu còn mang theo API key của nhà cung cấp AI và license key.
- Nguồn mật khẩu như 1Password hay một lệnh shell sẽ chạy một chương trình trên máy Mac mỗi lần bạn kết nối.
Những gì rời khỏi thiết bị của bạn
Tới máy chủ và nhà cung cấp của bạn
Query và kết quả đi giữa ứng dụng và máy chủ cơ sở dữ liệu của chính bạn, không bao giờ qua TablePro. Yêu cầu AI đi thẳng tới nhà cung cấp AI mà bạn thêm vào.
Tới TablePro
Khi chưa kích hoạt license, yêu cầu duy nhất mà ứng dụng cho Mac gửi tới TablePro là một báo cáo sử dụng mỗi ngày, bật sẵn và có thể tắt trong Cài đặt. Trên iPhone và iPad, không có gì được gửi tới TablePro trừ khi bạn bật Chia sẻ dữ liệu sử dụng (Share Usage Data). Báo cáo không bao giờ có hostname, username, mật khẩu, query hay dữ liệu trong các dòng, và cả hai ứng dụng đều không chứa công cụ báo lỗi (crash reporter) hay thư viện phân tích của bên thứ ba.
Giới hạn nên biết
- Ứng dụng cho Mac gửi báo cáo sử dụng đầu tiên mà không hỏi trước, và máy chủ của chúng tôi lưu địa chỉ IP của mọi báo cáo và mọi lần kiểm tra license.
Ứng dụng đến tay bạn như thế nào
Được ký và notarize
Các bản build cho Mac được ký bằng Developer ID, dùng Hardened Runtime và được Apple notarize. Các file .dmg nằm trên GitHub Releases, mỗi file có một checksum SHA-256. Homebrew cask tải về đúng file đó và kiểm tra SHA-256 của nó.
Cập nhật
Ứng dụng cho Mac cập nhật qua Sparkle và kiểm tra chữ ký EdDSA của từng bản cập nhật bằng public key có sẵn trong ứng dụng trước khi cài. Bước kiểm tra này không tắt được. Tự động cập nhật thì tắt được, trong Cài đặt hoặc bằng configuration profile.
Plugin driver
Driver không có sẵn trong ứng dụng cho Mac được tải về từ GitHub. Mỗi driver phải khớp với SHA-256 trong plugin registry và có chữ ký mã (code signature) hợp lệ: của chính TablePro, hoặc Developer ID của một nhà phát triển khác sau khi bạn đồng ý tin tưởng đích danh nhà phát triển đó.
iPhone và iPad
Ứng dụng cho iPhone và iPad có trên App Store, và App Store cũng phân phối các bản cập nhật của nó. Driver được tích hợp sẵn, và ứng dụng không tải về plugin nào.
Giới hạn nên biết
- Ứng dụng cho Mac không dùng App Sandbox của macOS: nó chạy với quyền truy cập file và mạng của tài khoản người dùng của bạn.
- Plugin driver chạy như một phần của TablePro và đọc được thông tin đăng nhập của mọi connection bạn mở.
Điều gì bảo vệ cơ sở dữ liệu khỏi thao tác nhầm
Các mức Safe Mode
Mỗi connection có một mức Safe Mode: Silent, Alert, Alert (Full), Safe Mode, Safe Mode (Full) và Read-Only. Alert hỏi lại trước khi chạy câu lệnh ghi, hai mức Safe Mode và Safe Mode (Full) còn yêu cầu Touch ID hoặc mật khẩu máy Mac, các mức có hậu tố (Full) hỏi cả trước câu lệnh đọc, còn Read-Only từ chối câu lệnh ghi. Tổ chức của bạn có thể áp một mức tối thiểu cho các máy Mac qua configuration profile. Trên iPhone và iPad, các mức là Off, Confirm Writes và Read-Only.
Câu lệnh phá hủy
Ở mọi mức trên Mac, DROP, TRUNCATE và DELETE không có WHERE luôn dừng lại để hỏi trước, kèm toàn bộ câu lệnh.
Giới hạn nên biết
- Safe Mode chạy bên trong TablePro và giúp tránh thao tác nhầm. Đây không phải sandbox hay hệ thống phân quyền: với quy tắc bắt buộc phải được tuân thủ, hãy dùng quyền của chính cơ sở dữ liệu.
- Connection mới bắt đầu ở mức Silent, câu lệnh chạy ngay như bạn viết, kể cả UPDATE không có WHERE.
- Ở chế độ Edit và Agent của chat, trợ lý AI chạy được câu lệnh, và ở mức Silent câu lệnh ghi của nó chạy luôn mà không hỏi. Agent mode chiếm cả cửa sổ giữ connection ở mức Alert hoặc nghiêm ngặt hơn; đây chỉ là lời nhắc, không phải cơ chế khóa.
MCP server
Chỉ chạy cục bộ
MCP server chỉ có trong ứng dụng cho Mac, và chỉ chạy khi bạn bật hoặc khi một client bạn đã cấu hình khởi động nó. Server lắng nghe trên 127.0.0.1, không có chế độ truy cập từ xa, và client không bao giờ thấy mật khẩu.
Client được duyệt như thế nào
Theo mặc định, mọi yêu cầu đều cần một token có phạm vi (Read Only, Read & Write hoặc Full Access), và lần đầu một client truy cập một connection, một hộp thoại trên máy Mac sẽ hỏi bạn.
Client làm được gì
Mỗi connection quy định client bên ngoài được làm gì: Blocked, Read Only (mặc định) hoặc Read & Write. Câu lệnh ghi vẫn phải qua mức Safe Mode của connection, DROP và TRUNCATE cần token Full Access và sự đồng ý của bạn mỗi lần, và mọi lệnh gọi đều được ghi lại trên máy Mac.
Giới hạn nên biết
- 127.0.0.1 cho biết server lắng nghe ở đâu, chứ không cho biết ai truy cập được. Chương trình nào trên máy Mac cũng kết nối được, và một trang đang mở trên claude.ai hay app.cursor.com cũng vậy. Bên nào cũng vẫn cần token, nên hãy luôn bật yêu cầu xác thực.
- Những gì client đọc được, nó gửi tới dịch vụ AI của chính nó theo điều khoản của dịch vụ đó.
Mã nguồn mở
Mã nguồn công khai
Cả hai ứng dụng đều là mã nguồn mở theo giấy phép AGPLv3, kể cả phần mã của các tính năng trả phí. Những gì trang này mô tả đều đọc được trong kho mã nguồn, cùng các script ký và notarize từng bản phát hành, và bạn có thể tự build ứng dụng cho Mac.
Báo cáo lỗ hổng bảo mật
Cách báo cáo
Gửi email tới [email protected], hoặc báo cáo riêng trên GitHub, bằng tiếng Anh hoặc tiếng Việt. Đừng mở issue, discussion hay pull request công khai cho một lỗ hổng.
Cần nêu những gì
Thành phần bị ảnh hưởng và phiên bản của nó: ứng dụng cho Mac, ứng dụng cho iPhone và iPad, một plugin hay trang web này. Thêm phiên bản macOS hoặc iOS, loại cơ sở dữ liệu nếu lỗi liên quan tới driver, các bước hoặc một proof of concept để tái hiện, và kẻ tấn công thu được gì.
Phiên bản nào được vá
Chỉ bản phát hành mới nhất của mỗi ứng dụng và plugin được vá lỗi bảo mật, nên hãy kiểm tra lỗi vẫn còn ở bản mới nhất trước khi báo cáo.