Privacy Policy
Last updated: 6 October 2026
This Privacy Policy is written in English, which is the authoritative version. Any translation (including the Polish section below) is provided for convenience only; the English version prevails in case of any discrepancy.
SqlSage for DBeaver is a plugin for the DBeaver database tool — a developer productivity tool that runs on your own machine. It is built so that as little of your data as technically possible passes through us. This policy explains what we do with data, and just as importantly what we never touch.
Contents
- Who we are
- Scope of this policy
- What data is involved
- What is sent to the AI provider
- What stays on your machine
- Licence, trial & update check
- Purchase & licence delivery
- The optional local agent bridge
- Website: analytics, cookies, checkout
- Legal bases (GDPR)
- Sub-processors
- Retention
- International transfers
- Your rights
- Security
- Children
- Changes to this policy
- Contact
1Who we are
SqlSage for DBeaver is an independent product of LUMA sp. z o.o. (trading as LumaSoft), a limited liability company registered in Poland: ul. Gawronia 15, 04-785 Warszawa, Poland; KRS 0001244636, NIP PL9522285489, REGON 544875680 ("we", "us", "the vendor"). We are the data controller for the limited personal data described in this policy.
SqlSage is not affiliated with, endorsed by or sponsored by DBeaver Corp, Anthropic or OpenAI.
You can reach us on any privacy or data-protection matter, including a request about your own data, at [email protected]. For anything else — installation, licences, refunds — write to [email protected].
We have not appointed a data protection officer. None of the conditions in Art. 37(1) GDPR applies to us: we are not a public authority or body; our core activities do not consist of processing that requires regular and systematic monitoring of data subjects on a large scale (the plugin contains no telemetry or analytics, and its licence check carries only a licence identifier and the plugin version, used solely to confirm that licence, so there is nothing to monitor); and we do not process special categories of data, or data relating to criminal convictions and offences, on a large scale. The mailbox above is the contact point for all data-protection matters.
2Scope of this policy
This policy covers three things: the SqlSage plugin installed into your own DBeaver, this website (sqlsagedbeaver.lumasoft.pl, including the p2 update site), and the small licensing backend we operate at api-dbeaver.lumasoft.pl.
It does not cover: the AI provider you sign in to (Anthropic or OpenAI) and their command-line tools, which you install and use under your own agreement with them; DBeaver itself, which is a separate product of DBeaver Corp; your databases; or the payments provider that sells the product to you. Each of those relationships is described below so you can see where the boundary sits.
3What data is involved
The plugin is architected so that almost nothing reaches us. The categories of data involved are:
| Data | Where it goes | Does it reach us? |
|---|---|---|
| Your SQL text and database schema metadata (table / column names and types, keys, indexes, dialect) | Passed to the claude or codex CLI on your machine, which sends it to your AI provider | No — it goes to your provider under your own account |
| Query result values (rows returned by your database) | Withheld from the model by default; sent only if you switch the opt-in on | No |
| AI provider credentials (your Claude / Codex sign-in) | Held entirely by those CLIs, under your own user account | No — we never see, store or transmit them, and the CLI is launched with an environment allow-list that excludes API-key and token variables |
| Your licence key, trial state, chat transcript and audit log | Local files, DBeaver's own preference store and Eclipse secure storage on your machine | No |
| Licence check (only once you have entered a paid licence, unless you switch it off) | At most one HTTPS request per 24 hours to our licensing backend, carrying the licence identifier and the plugin version | Yes — the licence identifier (which we already hold in your licence record), the date it was last seen, and standard connection metadata (e.g. IP address in our hosting provider's logs) — see section 6 |
| Update check | One anonymous HTTPS request per DBeaver session for a public metadata file on our update site | Standard connection metadata only (e.g. IP address in our hosting provider's logs) |
| Billing details (name, email, payment method, tax location) | Collected by Paddle, our Merchant of Record | No — we do not receive or store payment details |
| Your purchase email, Paddle transaction / subscription id and the licence key issued to you | Our licensing backend (a Cloudflare Worker and its key-value store) | Yes — this is the one place we hold personal data about a customer |
| Support correspondence | Our mailbox | Yes — only what you send us |
4What is sent to the AI provider
SqlSage does not hold an AI subscription for you and does not resell access to AI models. Instead it starts the Claude Code (claude) or OpenAI Codex (codex) command-line tool that you installed and signed in to, and talks to it as a local subprocess. Everything the model sees therefore travels to Anthropic or OpenAI through your tool, on your account, under your agreement with that provider.
What the plugin puts into a prompt is:
- Your SQL and your questions, and the SQL text or editor selection you act on.
- Schema metadata from the connection you are working on — table and view names, column names and types, primary and foreign keys, indexes, object definitions the engine itself reports, and the SQL dialect.
- Error text from your last failed statement, when you ask it to explain an error.
Query result values are withheld by default. When the assistant runs a read-only query, the rows are redacted before the result goes back to the model unless you have explicitly switched on the opt-in — the "Send query result values to the model" checkbox in Window → Preferences → SqlSage, or the /share on chat command. Be aware that this switch is a preference, not a one-off: once you turn it on it stays on, across chats and across restarts, until you turn it off with /share off or the same checkbox.
Because the request is carried by your provider's own tool, that provider's terms and privacy policy govern how the data is handled, including any retention, abuse monitoring or telemetry the tool performs on its own account. We recommend you read them:
- Anthropic (Claude / Claude Code): anthropic.com/legal/privacy
- OpenAI (Codex / ChatGPT): openai.com/policies/privacy-policy
5What stays on your machine
The plugin writes several things locally, and none of them are transmitted to us:
| What | Where | Notes |
|---|---|---|
| Audit log | %LOCALAPPDATA%\SqlSage\audit\YYYY-MM-DD.jsonl (or ~/.sqlsage/audit where that variable is not set) | One append-only, hash-chained line per database action taken by the assistant: the action, the classifier verdict (READ / WRITE / DDL / UNKNOWN), the decision (executed, confirmation required, rejected, blocked) and the first line of the statement as context; records of a write also carry a write identifier, DBeaver's connection identifier and a SHA-256 hash of the statement. Result data is never written. Writes the assistant proposes are always recorded — proposed, confirmed, rejected, expired, refused, committed, rolled back or failed — whatever the audit setting; switching audit logging off in Preferences stops only the other records (reads and other decisions). Local only; zero network egress. |
| Chat transcript | %LOCALAPPDATA%\SqlSage\sessions\current.txt (or ~/.sqlsage/sessions) | Your current conversation, so you can revisit it after a restart. Plain text. |
| Licence key and licence-check state | DBeaver's own instance preference store, under the pl.lumasoft.sqlsage.ui node | The licence key is a signed token issued to you; it is stored as an ordinary preference value, not encrypted. Treat it as you would a licence key in any other tool. Next to it: the times of the last licence-check attempt and last successful check, and a marker if our server reported the licence revoked or expired. |
| Trial clock | Eclipse Equinox Secure Storage for your operating-system user (encrypted), with a copy in DBeaver's installation-wide configuration preferences | The trial start date and the last date the plugin was seen running — nothing else. Kept per user rather than per workspace, so a new workspace does not restart the trial. Never transmitted. |
| Agent bridge token | Eclipse Equinox Secure Storage | Stored encrypted; only present if you enable the optional bridge (section 8). |
| Your settings | DBeaver preference store | Provider and model choice, privacy opt-in, audit on/off, update-check on/off, the "Never contact the license server" switch, per-connection execution policy. |
All of it is removed when you delete those folders and uninstall the plugin. We have no copy and no way to retrieve any of it.
6Licence, trial & update check
Trial. The plugin grants a 30-day Pro trial on first run, with no sign-up and no card. The trial clock is kept on your machine — in Eclipse secure storage for your operating-system user, with a copy in DBeaver's configuration preferences. Nothing is sent to us when it starts, runs or ends; when it ends the plugin continues to work on the Free tier.
Licence check. A purchased licence key is a token signed with our Ed25519 key; the plugin verifies that signature locally against a public key compiled into it. Once you have entered a paid licence key, the plugin also confirms with our licensing backend that the licence is still active: a background check about 15 seconds after DBeaver starts, re-evaluated hourly but contacting the server at most once every 24 hours, plus one check right after you paste a new key. Each check is a single HTTPS POST to https://api-dbeaver.lumasoft.pl/license/validate whose body carries only the licence identifier, with the plugin version in the user-agent header — no email address, no device fingerprint, no schema, queries, results or usage data. On the Free tier or the trial, no check is made.
What we keep from a check. An identifier we do not know is answered and nothing is stored. For a licence we hold, we record the date it was last seen (one marker per licence identifier, rewritten at most once a day and deleted automatically after 35 days) and increment a running total of checks that carries no identifier. We use this to confirm the licence and to count active installations. As with any HTTPS request, our hosting provider's logs may record standard connection metadata such as your IP address.
What the answer does. If the licence is active, it keeps working, and the plugin may replace the stored key with a freshly signed one (for example after a subscription renews). If our server reports the licence revoked (for example after a refund) or expired, the Pro features stop and the plugin falls back to the trial if it is still running, otherwise to Free. If the server cannot be reached, the licence keeps working for 14 days after the last successful check — never beyond the expiry date in the key itself — and then falls back the same way until a check succeeds.
Switching it off. Window → Preferences → SqlSage → "Never contact the license server". With it on, the plugin makes no licence request at all; the key simply works until its own expiry date, without automatic renewal.
Update check. Once per DBeaver session, a background job makes a single HTTPS GET for /updatesite/content.jar on our update site — a public file listing the current version — and compares it with the version you have installed. It sends a plain SqlSage-UpdateChecker user agent and nothing else: no identifier, no licence, no schema, no queries, no telemetry. You can switch it off in Preferences. As with any HTTPS request, our hosting provider's logs may record standard connection metadata such as your IP address.
7Purchase & licence delivery
Payment. Purchases are sold and processed by Paddle acting as Merchant of Record. Paddle is the seller of record for your transaction: it collects and controls your billing information (name, email, payment method, tax and location data), handles VAT and sales tax, issues the invoice, and manages chargebacks and refunds. We never receive or store your card details.
Licence issuance. When a payment completes, Paddle sends a signed notification to our licensing backend — a Cloudflare Worker at api-dbeaver.lumasoft.pl. The Worker signs a licence key for you and stores a record in a Cloudflare key-value namespace containing: a generated licence identifier, the licence type and tier, its expiry (for subscriptions), the signed key itself, the Paddle transaction and subscription identifiers, a timestamp, and the email address you used at checkout. It also keeps a lookup index of that address as a SHA-256 hash rather than in the clear, and short-lived markers so a retried notification cannot issue a duplicate licence.
Delivery. The key is issued the moment the payment notification is verified and is retrievable from our licensing service using the transaction identifier Paddle gives you at checkout (/license/retrieve). If you lose it, the /license/resend endpoint will re-send the keys held for an address you enter; the response is deliberately identical whether or not we hold anything for that address, and the endpoint is rate-limited per address and IP address to blunt abuse. The counters used for that rate limit are keyed by a hash and expire automatically. Where email delivery is enabled, the key is sent from our own Microsoft 365 mailbox on the lumasoft.pl domain; we do not hand your address to a bulk-email or marketing platform, and we never use it to market to you. If your key does not reach you, write to [email protected] and we will send it.
We do not operate user accounts, and there is no password to create: the purchase email is the proof of ownership.
8The optional local agent bridge
SqlSage can expose the connection you are working on to your own external AI agent (for example Claude Code, Codex CLI, Cursor or Claude Desktop) over a small server bound to 127.0.0.1 on your machine, guarded by a 256-bit bearer token stored encrypted in Eclipse Secure Storage. It is off by default and you switch it on in the panel.
While it is on: external agents are restricted to read-only statements, writes and schema changes are refused outright, row values are withheld, the global kill switch still applies, and every classification is written to the same local audit log. Your database credentials never leave DBeaver.
9Website: analytics, cookies, checkout
Analytics. This website uses Google Analytics 4 in Consent Mode v2. Before you make a choice, every consent signal is set to denied: no analytics or advertising cookies or identifiers are stored on your device, and only anonymous, cookieless measurement is sent. Cookies and full analytics are enabled only after you click "Accept" in the banner; if you click "Reject", nothing further is stored. Your choice is remembered in your browser's local storage under the key sqlsage-consent — clear this site's storage to be asked again. Advertising features are not used, ad-data redaction and URL passthrough are enabled.
Checkout. The Paddle checkout script is loaded from Paddle's CDN only when you interact with a buy button (hover, focus or click) — not on page load. If you never touch a buy button, your browser never contacts Paddle from this site. Once the overlay opens, what you enter goes to Paddle as Merchant of Record.
Install counter. Clicking the "Copy" button next to the update-site URL fires a single, fire-and-forget request to a counter we run at api.lumasoft.pl that increments a tally of install attempts for this product. It carries no identifier, no cookie and no payload beyond the product name; standard connection metadata may appear in our hosting provider's logs.
The plugin itself contains no analytics, cookies or tracking of any kind. This section is about the website only.
10Legal bases (GDPR)
Where the EU General Data Protection Regulation applies, we rely on:
- Performance of a contract (Art. 6(1)(b)) — issuing, delivering and re-sending your licence key, and supporting the product you bought.
- Legitimate interests (Art. 6(1)(f)) — keeping the licensing service secure, preventing licence fraud and abuse of the resend endpoint, confirming through the licence check that an entered licence is still active and counting active installations, and serving the version file that powers the update check.
- Consent (Art. 6(1)(a)) — website analytics cookies, and your opt-in to send query result values to your AI provider. You can withdraw either at any time, with no effect on the rest of the product.
- Legal obligation (Art. 6(1)(c)) — tax and accounting duties, discharged primarily by Paddle as Merchant of Record.
11Sub-processors
We use a small number of providers to run the service: Cloudflare (this website, the p2 update site, the licensing Worker and its key-value store), Paddle (Merchant of Record), Google (website analytics only) and Microsoft (our own Microsoft 365 mailboxes, used for licence-key delivery and support correspondence). The current list, with roles, data and locations, is on our Sub-processors page.
Personal data these providers handle for us is processed on that provider's own data processing terms, which form part of the service agreement we accept with each of them.
Anthropic and OpenAI are not our sub-processors. They are your providers, reached through the CLI you installed and the account you signed in to, and nothing about that traffic passes through us. Likewise DBeaver Corp is the vendor of the host application, not a processor acting for us.
12Retention
- Licence records (licence identifier and key, type, tier, expiry, Paddle identifiers, purchase email, hashed-email index) are kept in our key-value store for as long as the licence is in force, and afterwards for as long as we need them to support it, re-send keys, honour renewals, handle refunds and chargebacks, prevent licence fraud and meet our accounting and tax obligations. To be precise rather than reassuring: no automatic expiry is configured on these records, so they persist until deleted — a perpetual licence record is expected to persist indefinitely, because it is the only proof of an entitlement that never ends. You can ask us to erase your record at any time (see section 14); the consequence is that we can no longer re-send your key or confirm your entitlement.
- Idempotency markers and rate-limit counters expire automatically — 60 days and roughly an hour respectively.
- Licence-check markers (a licence identifier and the date it was last seen) expire automatically after 35 days. The running total of checks carries no identifier. Nothing is stored for an identifier we do not know.
- Local data (licence key, trial state, chat transcript, audit log, settings) lives only on your machine, for as long as you keep it.
- Billing records are kept by Paddle under its own policy and applicable tax law.
- Support correspondence is kept until you ask us to delete it.
- Server logs at our hosting provider are kept for that provider's standard period.
13International transfers
Our infrastructure providers operate globally, so personal data may be processed outside the European Economic Area. Where that happens, the transfer is covered by the safeguards the relevant provider implements — for example the European Commission's Standard Contractual Clauses. Anything you send to your own AI provider is transferred under your own agreement with them, not ours.
14Your rights
Under the GDPR you have the right to access your personal data, to have it corrected or erased, to restrict or object to processing, to data portability, and to withdraw consent where processing rests on consent. You also have the right to complain to a supervisory authority — in Poland the President of the Personal Data Protection Office (Prezes Urzędu Ochrony Danych Osobowych, UODO), or the authority where you live.
To exercise any of these, write to [email protected]. For a request about your billing data, Paddle is the controller of that data as Merchant of Record; tell us and we will point you to the right place. Note that erasing your licence record means we can no longer re-send your key or verify your entitlement.
15Security
Our approach is to hold as little as possible. Prompts and query results never reach our servers. We never take custody of your AI provider credentials, and the CLI we launch is given a filtered environment that excludes API-key and token variables. Licence keys are signed with a private key that lives only in our licensing Worker as a secret, never in the product or the repository, and never in the key-value store. Webhook notifications are signature-verified over their exact bytes with a replay window before we act on them. The database work the assistant does passes through a single classifier chokepoint: only statements provable as reads run automatically, on a separate SqlSage connection with a timeout and a row limit, and anything else stops for your explicit confirmation.
No method of transmission or storage is perfectly secure. We design the product so that there is very little sensitive data on our side to protect in the first place.
16Children
SqlSage is a professional developer tool and is not directed at children. We do not knowingly collect personal data from anyone under 16.
17Changes to this policy
We may update this policy as the product changes — and we will update it before any feature ships that would send your prompts through infrastructure we operate, or that would add a provider to the list in section 11. Material changes are reflected in the "Last updated" date and, where appropriate, notified to customers.
18Contact
LUMA sp. z o.o.
ul. Gawronia 15, 04-785 Warszawa, Poland
KRS 0001244636 · NIP PL9522285489 · REGON 544875680
Data protection and privacy: [email protected]
Everything else: [email protected]
// The following is a Polish translation provided for convenience. The English version above is the legally binding text.
Polityka prywatności (wersja polska — informacyjnie)
Wersja angielska ma moc rozstrzygającą. Poniższe tłumaczenie ma charakter wyłącznie informacyjny; w razie rozbieżności obowiązuje wersja angielska.
Administrator danych: LUMA sp. z o.o., ul. Gawronia 15, 04-785 Warszawa (KRS 0001244636, NIP PL9522285489, REGON 544875680). Sprawy danych osobowych: [email protected]; pozostałe sprawy: [email protected]. SqlSage nie jest powiązany z DBeaver Corp, Anthropic ani OpenAI.
Nie powołaliśmy inspektora ochrony danych (IOD). Nie spełniamy przesłanek art. 37 ust. 1 RODO: nie jesteśmy organem ani podmiotem publicznym, nasza główna działalność nie polega na regularnym i systematycznym monitorowaniu osób na dużą skalę (wtyczka nie ma telemetrii ani analityki, a sprawdzenie licencji przesyła wyłącznie identyfikator licencji i wersję wtyczki, wyłącznie w celu potwierdzenia tej licencji), nie przetwarzamy też na dużą skalę danych szczególnych kategorii ani danych o wyrokach skazujących. Kontakt w sprawach danych: adres powyżej.
Dane wysyłane do modelu. SqlSage uruchamia lokalnie zainstalowane przez Ciebie CLI claude lub codex jako podproces — Twoje zapytania trafiają do Anthropic/OpenAI na Twoim koncie, nie przez nasze serwery. Przekazujemy: treść SQL, metadane schematu (nazwy i typy tabel/kolumn, klucze, indeksy, dialekt) oraz treść błędu, gdy prosisz o jego wyjaśnienie. Wartości wierszy są domyślnie ukrywane — wysyłamy je tylko, jeśli włączysz opcję w Preferencjach albo komendą /share on; uwaga: to ustawienie trwałe, obowiązuje do wyłączenia, także po restarcie.
Nigdy nie dotykamy Twoich poświadczeń. Tokeny/klucze API dostawców AI pozostają w ich CLI; podproces uruchamiamy z filtrowanym środowiskiem bez zmiennych typu *_API_KEY / *_TOKEN.
Co zostaje lokalnie: log audytowy (%LOCALAPPDATA%\SqlSage\audit, łańcuchowany skrótami, zawiera pierwszą linię instrukcji — bez danych wynikowych; zapisy proponowane przez asystenta są rejestrowane zawsze, niezależnie od ustawienia audytu, które wyłącza tylko pozostałe wpisy; zero ruchu sieciowego), transkrypt czatu (%LOCALAPPDATA%\SqlSage\sessions), klucz licencyjny i stan sprawdzania licencji w preferencjach DBeavera (klucz licencyjny nie jest szyfrowany), zegar triala w Equinox Secure Storage dla Twojego użytkownika systemu (szyfrowany) z kopią w konfiguracji DBeavera, token opcjonalnego mostu MCP w Equinox Secure Storage (szyfrowany). Nic z tego do nas nie trafia.
Licencja i aktualizacje. 30-dniowy trial Pro bez karty, liczony lokalnie, bez żadnego ruchu sieciowego. Klucz licencyjny jest weryfikowany lokalnie (podpis Ed25519). Gdy wpiszesz płatną licencję, wtyczka sprawdza ją też na naszym serwerze licencji: około 15 s po starcie DBeavera i najwyżej raz na 24 h (plus raz zaraz po wklejeniu nowego klucza) — jedno zapytanie HTTPS POST na https://api-dbeaver.lumasoft.pl/license/validate zawierające wyłącznie identyfikator licencji oraz wersję wtyczki w nagłówku User-Agent. Dla nieznanego identyfikatora nic nie zapisujemy; dla znanej licencji zapisujemy datę ostatniego sprawdzenia (wygasa automatycznie po 35 dniach) i zwiększamy ogólny licznik sprawdzeń bez identyfikatora. Jeśli serwer zgłosi licencję jako unieważnioną lub wygasłą, funkcje Pro wyłączają się (wtyczka wraca do triala, jeśli jeszcze trwa, albo do Free). Bez połączenia licencja działa do 14 dni od ostatniego udanego sprawdzenia, nigdy dłużej niż data ważności klucza. Opcja Window → Preferences → SqlSage → "Never contact the license server" wyłącza sprawdzanie całkowicie — klucz działa wtedy do własnej daty ważności, bez automatycznego odnowienia. Sprawdzanie aktualizacji to jedno anonimowe zapytanie HTTPS na sesję o publiczny plik wersji; można je wyłączyć. Wtyczka nie zawiera telemetrii ani analityki.
Zakup. Sprzedawcą formalnym (Merchant of Record) jest Paddle — pobiera i kontroluje dane rozliczeniowe, VAT, faktury, chargebacki i zwroty; my nie otrzymujemy danych karty. Po płatności nasz Worker (Cloudflare) zapisuje rekord licencji zawierający m.in. adres e-mail z zakupu, identyfikatory transakcji/subskrypcji Paddle i podpisany klucz; indeks adresu przechowujemy jako skrót SHA-256. Klucz jest dostępny w naszej usłudze licencyjnej po identyfikatorze transakcji z checkoutu, a jeśli włączona jest wysyłka mailowa — wysyłamy go z naszej własnej skrzynki Microsoft 365 w domenie lumasoft.pl (nie przekazujemy adresu do platform mailingowych i nie wysyłamy marketingu). Endpoint ponownego wysłania odpowiada zawsze tak samo (bez ujawniania, czy mamy dane) i jest limitowany.
Retencja. Rekordy licencji (w tym adres e-mail z zakupu) przechowujemy przez okres obowiązywania licencji oraz tak długo, jak jest to potrzebne do jej obsługi, ponownego wysyłania klucza, odnowień, zwrotów i chargebacków, przeciwdziałania nadużyciom oraz do wypełnienia obowiązków księgowych i podatkowych. Mówiąc wprost: rekordy nie mają automatycznego wygaszania — trwają do usunięcia, a rekord licencji wieczystej z natury trwa bezterminowo. Możesz w każdej chwili zażądać usunięcia; wtedy nie będziemy mogli ponownie wysłać klucza ani potwierdzić uprawnienia. Znaczniki sprawdzania licencji (identyfikator licencji i data) wygasają automatycznie po 35 dniach.
Strona internetowa. Google Analytics 4 w trybie Consent Mode v2 — do momentu zgody nic nie jest zapisywane na urządzeniu (tylko anonimowy pomiar bez cookies). Skrypt checkoutu Paddle ładujemy dopiero przy interakcji z przyciskiem zakupu. Przycisk kopiowania adresu update-site wysyła jeden licznik instalacji bez identyfikatorów.
Twoje prawa (RODO): dostęp, sprostowanie, usunięcie, ograniczenie, sprzeciw, przenoszenie danych, cofnięcie zgody oraz skarga do Prezesa UODO. Wnioski: [email protected]; sprawy dotyczące danych płatniczych kierujemy do Paddle jako administratora tych danych.
Pełną, wiążącą treść znajdziesz w wersji angielskiej powyżej.