Calíope spricht mit acht Arten von Servern über Clients, die ich selbst geschrieben habe. Jeder stammt aus dem, was seine Hersteller veröffentlichen: ihrer Spezifikation und Dokumentation oder, wo sie keine Spezifikation veröffentlichen, wie bei Oracle, dem Treiber, den sie selbst als Referenz nennen; nie aus dem Client eines anderen. Und jeder implementiert, was Calíope braucht, und nichts mehr. Diese Seite fasst jeden in drei Teilen zusammen: wonach er geschrieben ist, was er spricht und was er bewusst weglässt, mit dem Grund.
Hinter jeder Zusammenfassung steht eine vollständige Spezifikation: jede Nachricht, jede Anmeldemethode, wie der Client gebaut ist und wie er gegen echte Server getestet wird. Sie liegt im Quellcode-Repository, auf Spanisch, und wird bei jedem Commit gegen den Code geprüft, den sie beschreibt: Ändert sich ein Treiber, muss sein Dokument neu gelesen werden, bevor die Änderung hineinkommt.
MySQL und MariaDB
Geschrieben nach
- Oracles Dokumentation MySQL Client/Server Protocol, aktuelle Ausgabe, und das Referenzhandbuch von MySQL 8.4.
- MariaDBs Dokumentation Client/Server Protocol und ihre Seiten zu jedem Authentifizierungs-Plugin.
- RFC 8032 (Ed25519), RFC 8017 (RSA-OAEP) und RFC 8018 (PBKDF2) für die Anmeldung.
Was er spricht
- Die Verbindungsphase mit der Aushandlung der Fähigkeiten, und TLS, das mittendrin beginnt.
- Die Anmeldung mit
mysql_native_password,caching_sha2_password,client_ed25519,parsecundmysql_clear_password, Letzteres nur über TLS. - Textabfragen (
COM_QUERY) mit mehreren Ergebnissen pro Antwort, sodass einCALLseine Zeilen liefert. - Prepared Statements (
COM_STMT_PREPARE,COM_STMT_EXECUTE,COM_STMT_CLOSE) mit binären Zeilen: Die Werte reisen getrennt vom SQL. LOCAL INFILE, das nur die Datei sendet, die du auswählst.- Betroffene Zeilen, die letzte eingefügte ID, Warnungen und den Transaktionsstatus, so wie der Server sie in seiner eigenen Antwort meldet.
- Das Anhalten einer laufenden Abfrage mit
KILL QUERYüber eine zweite Verbindung.
Was er nicht spricht
CLIENT_MULTI_STATEMENTS: wird nie deklariert. Der Editor sendet eine Anweisung nach der anderen, und ohne diese Fähigkeit kann eingeschleuster Text keine zweite Anweisung anhängen.- Kompression und das X-Protokoll (Port 33060): Kein Werkzeug braucht sie.
- Serverseitige Cursor: Große Ergebnisse kommen stattdessen Zeile für Zeile.
- Replikation,
COM_CHANGE_USERund die Binlog-Befehle: Kein Werkzeug nutzt sie. - Andere Anmeldemethoden (
sha256_password, Kerberos, LDAP SASL, GSSAPI): werden mit dem Namen der Methode abgelehnt, sodass der Fehler sagt, was fehlt. - Ein Klartext-Passwort über eine unverschlüsselte Verbindung: niemals.
- Server vor MySQL 4.1.
Auch TiDB
- TiDB spricht dasselbe Protokoll und geht deshalb über denselben Client, gemessen gegen TiDB 8.5. Seine Begrüßung trägt
8.0.11-TiDB-v8.5.8, und diese Versionszeichenkette sagt Calíope, dass es mit TiDB spricht, egal was im Profil steht. - Die Verbindungs-ID von TiDB kann 64 Bit breit sein, die Begrüßung trägt aber nur die unteren 32, und ein
KILL QUERYdamit hält nichts an: Bei TiDB frage ichCONNECTION_ID()einmal pro Verbindung ab und breche mit der ganzen ID ab. - Die eigenen Anmeldemethoden von TiDB (
tidb_sm3_password,tidb_auth_token): nicht gesprochen und mit dem Namen der Methode abgelehnt, wie jede andere. - Sein Status-Port (10080) und seine Prometheus-Metriken: ein zweiter Port, den du öffnen und durch den Tunnel führen müsstest. Gezeigt wird, was die SQL-Verbindung liefert, der Rest sagt n/a.
PostgreSQL
Geschrieben nach
- Das Kapitel Frontend/Backend Protocol der PostgreSQL-Dokumentation, aktuelle Ausgabe (beim Schreiben PostgreSQL 18).
- RFC 5802 und RFC 7677 (SCRAM-SHA-256), sowie RFC 4013 und RFC 3454 (SASLprep).
Was er spricht
- TLS wird vor allem anderen angefragt; lehnt der Server ab, geht nichts im Klartext hinaus.
- Die Anmeldung mit SCRAM-SHA-256, md5 oder Klartext-Passwort, Letzteres nur über TLS.
- Die einfache und die erweiterte Abfrage (
Parse,Bind,Execute), mit den Parametern getrennt vom SQL. - Jeder Wert als Text, derselbe, den
psqlzeigt, Zeile für Zeile geliefert, sobald er ankommt. - Betroffene Zeilen, Fehler und Hinweise mit allen ihren Feldern, und der Transaktionsstatus mit jeder Antwort.
- Das Abbrechen mit
CancelRequestund dem Schlüssel, den der Server bei der Anmeldung übergibt, undDISCARD ALL, bevor eine Verbindung in den Pool zurückgeht.
Was er nicht spricht
COPY: Calíope sendet es nie; ein im Editor getipptes schließt die Verbindung, weil der Server auf Daten warten würde, die nie kommen.LISTEN/NOTIFY: Benachrichtigungen werden gelesen und verworfen.- Kerberos (GSSAPI) und SSPI: Sie brauchen System-Tickets, die die Sandbox nicht gibt.
- SCRAM mit Kanalbindung (
SCRAM-SHA-256-PLUS): Der Server kann sie nicht verlangen, also ändert sie nichts daran, wer hineinkommt. - Binäre Ergebnisse, benannte Cursor, benannte Prepared Statements und Pipelining: eine Anfrage unterwegs pro Verbindung.
- Das Replikationsprotokoll und Funktionsaufrufe.
- Ein Klartext-Passwort über eine unverschlüsselte Verbindung: niemals.
MongoDB
Geschrieben nach
- Die BSON-Spezifikation, Version 1.1.
- Die Dokumentation MongoDB Wire Protocol und das Server-Handbuch.
- Die Treiber-Spezifikationen, die MongoDB als Dokumentation veröffentlicht:
OP_MSG, der Handshake, die Authentifizierung, der Connection String, die DNS-Erkennung und Decimal128. - RFC 5802, RFC 7677, RFC 4013, RFC 3986 und RFC 2782.
Was er spricht
- BSON, Typ für Typ, einschließlich Decimal128.
OP_MSGund derhello-Handshake, mit MongoDB 4.0 oder neuer.- Die Anmeldung mit SCRAM-SHA-256 und SCRAM-SHA-1.
- TLS mit derselben Richtlinie wie bei allen anderen Engines.
- Connection Strings,
mongodb://undmongodb+srv://, mit den SRV- und TXT-Einträgen über das DNS des Systems. - Der Primary eines Replica Sets, aus der Antwort auf
hellogelesen, und ein Verbindungspool.
Was er nicht spricht
- Jede Nachricht außer
OP_MSG: Ein Server, der nur die alten spricht, ist älter als 4.0 und wird abgelehnt. - Kompression und Exhaust-Cursor: Jeder Befehl wartet auf seine Antwort.
- Sessions, Transaktionen, Change Streams, wiederholbare Schreibvorgänge und das Lesen von Secondaries: Die Werkzeuge nutzen sie nicht, und alles geht an den Primary.
- Anmeldemethoden, die nicht SCRAM sind (x.509, Kerberos, LDAP, AWS, OIDC): Der Fehler nennt, was der Server anbietet.
- Veraltete BSON-Typen: werden gelesen und als nicht unterstützt angezeigt, nie geschrieben.
- Dateioptionen im Connection String (
tlsCAFile): Die Sandbox lässt die App keinen Pfad lesen, also gehören die Zertifikate ins Profil. - Ein
mongodb+srv://-Name durch einen SSH-Tunnel: Das andere Ende würde ihn auflösen, nicht dein Gerät.
Redis
Geschrieben nach
- Die Spezifikation des RESP-Protokolls, die RESP2 und RESP3 abdeckt.
- Die Befehlsreferenz von Redis für die Befehle, die der Client von sich aus sendet (
HELLO,AUTH,SELECT,SCAN, dieCLUSTER-Familie). - Die Spezifikation des Redis-Clusters: Slots, Hash-Tags,
MOVEDundASK.
Was er spricht
- RESP2 und RESP3, alle Typen, jede Antwort ihrem Befehl über die Position zugeordnet.
- Die Anmeldung mit
HELLOoderAUTH, mit einem ACL-Benutzer und seinem Passwort. SELECT, auf jede Verbindung angewendet, wenn sie verliehen wird, und TLS mit derselben Richtlinie wie bei allen anderen Engines.- Der Cluster-Modus: die 16.384 Slots, eine neu gelesene Karte nach
MOVED, ein einmaligesASK. - Eine Konsole, die jeden Befehl, den du tippst, gegen eine Liste prüft, bevor er den Server erreicht.
- Ein Sentinel, geöffnet über sein eigenes Profil: Topologie zeigt die Primaries, die er überwacht, ihre Replicas und die anderen Sentinels, so wie er sie meldet (
SENTINEL MASTERS,REPLICAS,SENTINELS).
Was er nicht spricht
- Die Inline-Form der Befehle: Sie kann keine beliebigen Bytes tragen.
- Pub/Sub und
MONITOR: Nichts im Client abonniert. - Transaktionen (
MULTI,WATCH), blockierende Befehle ohne Zeitlimit,CLIENT REPLY OFF,RESETund Replikationsbefehle: Eine Verbindung aus dem Pool teilen sich alle Werkzeuge, und sie würden Zustand darauf hinterlassen. - Clientseitiges Caching und das Nachverfolgen über Sentinel, welcher Knoten gerade Primary ist: Der Client verbindet sich mit der Adresse im Profil.
- Ein Cluster durch einen SSH-Tunnel: Die Knoten melden Adressen, die der Tunnel nicht erreicht, also wird er vor dem Verbinden abgelehnt.
Auch Valkey
- Valkey spricht RESP2 und RESP3 wie Redis und geht deshalb über denselben Client, gemessen gegen Valkey 8.0 und 9.1, einzeln und im Cluster mit wandernden Slots.
HELLOantwortetserver valkey, und das sagt Calíope, mit welchem der beiden es spricht. - Valkey veröffentlicht kein
redis_mode:: OhneHELLOwird der Modus ausserver_mode:inINFO servergelesen. - Was Valkey obendrauf bringt (
COMMANDLOG, nummerierte Datenbanken im Cluster): nicht gesprochen.SLOWLOGgibt es weiterhin, und das liest Langsame Befehle.
SQL Server (TDS)
Geschrieben nach
- Microsofts [MS-TDS] Tabular Data Stream Protocol, Revision 42.0 vom 17. Juni 2026, veröffentlicht unter dem Open Specification Promise.
- Die SQL-Server-Seite zu TDS 8.0 und strenger Verschlüsselung, und RFC 7301 für ihr ALPN.
- [MS-SSCLRT] für die Formate
geographyundgeometry. - Ein Open-Source-Client in Swift, tds-nio, wurde beim Schreiben als Referenz gelesen; nichts von seinem Code wurde kopiert.
Was er spricht
- Immer verschlüsselt: zuerst der strenge Modus von TDS 8.0, TLS ab dem ersten Byte mit TLS 1.2 oder neuer, und der Handshake von TDS 7.x im PRELOGIN, wenn der Server den strengen Modus nicht anbietet.
- PRELOGIN und LOGIN7 (TDS 7.4) mit einer SQL-Server-Anmeldung.
- Batches (
SQL_BATCH) und parametrisierte Abfragen über RPC ansp_executesql, mit typisierten Werten getrennt vom SQL. - Der Token-Strom: Spalten, Zeilen, Zeilenzahlen, Fehler, Meldungen und Umgebungsänderungen, und die Typen von SQL Server, räumliche eingeschlossen.
- Das Abbrechen mit
ATTENTION, undRESETCONNECTION, bevor eine Verbindung in den Pool zurückgeht. GOals Batch-Trenner, vom Client behandelt wie von den Werkzeugen von SQL Server.
Was er nicht spricht
- MARS: eine Anfrage pro Verbindung, und eine Verbindung pro Nutzer des Pools.
- Die integrierte Windows-Authentifizierung (SSPI, Kerberos, NTLM): Sie braucht eine Domäne und einen Kerberos-Client, die die Sandbox nicht hat.
- Microsoft Entra ID: ein OAuth-Ablauf gegen Microsoft, ein eigenes Produkt.
- Unverschlüsselte Verbindungen, oder solche, die nur die Anmeldung verschlüsseln würden: werden abgelehnt.
- Massenladen, Anfragen an den Transaktionsmanager und das Routing von Always On: Transaktionen reisen als T-SQL, Ladevorgänge als
INSERT. text,ntext,image,hierarchyidund benutzerdefinierte CLR-Typen: werden als nicht unterstützt angezeigt.
ClickHouse (HTTP)
Geschrieben nach
- Die ClickHouse-Dokumentation zu ihrer HTTP-Schnittstelle, ihren Formaten und Einstellungen, der Syntax der Abfrageparameter und ihren Systemtabellen.
- RFC 3986 für die Kodierung des Query-Strings.
- Und der Server selbst, der seine Einstellungen, Funktionen und Typen in seinen eigenen
system-Tabellen beschreibt.
Was er spricht
- HTTP oder HTTPS auf Apples
URLSession, ohne zusätzliche Abhängigkeit: eine Anweisung pro Anfrage, die Datenbank in jeder Anfrage. - Typisierte Abfrageparameter (
{name:Typ}): Die Werte reisen getrennt vom SQL. - Ergebnisse werden Zeile für Zeile gelesen, sobald die Abfrage fertig ist, sodass ein Fehler am Ende eines
200 OKerkannt wird. - Eine Obergrenze für zurückgegebene Zeilen, neben der Zahl angegeben, die sie begrenzt.
- Eine Session nur für einen Batch, der eine braucht, der Fortschritt aus
system.processesund das Anhalten mitKILL QUERY. - TLS mit denselben drei Optionen wie bei den anderen Engines; durch einen SSH-Tunnel wird das Zertifikat weiterhin gegen den Host des Profils geprüft.
Was er nicht spricht
- Das native TCP-Protokoll (Port 9000) und sein Format: Die HTTP-Schnittstelle liefert, was Calíope braucht, ohne binäres Protokoll und ohne Abhängigkeit.
- gRPC und die Schnittstellen, die MySQL oder PostgreSQL nachahmen.
- Mehrere Anweisungen pro Anfrage, oder eine Session pro Tab: Der Server lehnt zwei gleichzeitige Anfragen auf einer Session ab.
- Daten im Body der Anfrage und externe Tabellen: Die Inserts der App reisen als SQL.
- Client-Zertifikate: Ein Profil, das sie mitbringt, wird abgelehnt.
- Transaktionen: Der Server hat keine.
Oracle Database (TNS)
Geschrieben nach
- Oracle veröffentlicht keine Spezifikation seines Netzwerkprotokolls. Was Oracle veröffentlicht und als öffentliche Referenz nennt, ist der Code des Thin-Modus seines eigenen Python-Treibers, python-oracledb, unter der Universal Permissive License 1.0 oder der Apache License 2.0. Ich schreibe danach, wie er am 6. Oktober 2026 stand, in einer festen Revision; jede Datei, die davon abgeleitet ist, sagt es, und seine Lizenz reist mit den übrigen Drittanbieter-Hinweisen von Calíope.
- Die Dokumentation von Oracle: die SQL Language Reference, die Database Reference für die Sichten des Data Dictionary, die Referenz der PL/SQL-Pakete und die Net Services Reference.
- Die übrigen Oracle-Clients, in jeder Sprache, blieben ungeöffnet.
Was er spricht
- TNS über TCP oder über TLS (TCPS), geprüft gegen die Zertifikate des Systems oder das, das das Profil mitbringt, mit dem Namen weiterhin gegen den Host des Profils geprüft, auch durch einen SSH-Tunnel, und die Weiterleitungen des Listeners.
- Die Anmeldung mit dem Datenbankpasswort (O5LOGON).
- Anweisungen mit typisierten Werten getrennt vom SQL und die Zeilen in Stapeln;
CLOBundBLOBwerden bis zu einer Obergrenze vollständig gelesen, darüber nennt die Zelle ihre Größe. - Das Abbrechen einer laufenden Anweisung.
Was er nicht spricht
- Die Unterbrechung außerhalb des Bands: SwiftNIO kann sie nicht senden, deshalb läuft das Abbrechen immer im Band.
- Wallet und Client-Zertifikate, Zugriffstoken, Kerberos und die Anmeldung über das Betriebssystem: Angemeldet wird mit dem Passwort, mit TLS in einer Richtung, und ein Profil mit Client-Zertifikat wird abgelehnt.
- Objekttypen, Collections,
XMLTYPE, binäres JSON,VECTORundBFILEzu dekodieren: Die Zelle nennt stattdessen den Typ. - DRCP, der eigene Sitzungspool des Treibers, Pipelining und die schnelle Authentifizierung.
- Advanced Queuing, das Zwei-Phasen-Commit, das Laden über den direkten Pfad und Änderungsbenachrichtigungen.
tnsnames.oraundsqlnet.ora: Das Profil bringt Host, Port und Dienst mit.
Apache Cassandra und ScyllaDB (CQL)
Geschrieben nach
- Der Spezifikation des nativen Protokolls v4, die das Apache-Cassandra-Projekt veröffentlicht, in einer festen Revision vom 3. April 2025.
- Was ScyllaDB dem Protokoll hinzufügt und Calíope liest, die Schlüssel
SCYLLA_*vonSUPPORTED, gemessen am Server. - Andere Cassandra-Clients, in welcher Sprache auch immer, wurden nicht geöffnet.
Was er spricht
- Version 4 des nativen Protokolls, die Cassandra ab 4.1 und ScyllaDB ab 2025.1 sprechen, wobei jede Antwort über ihren Stream ihrer Anfrage zugeordnet wird.
- Anmeldung mit Passwort (SASL
PLAINgegenPasswordAuthenticator), TLS mit optionalem Client-Zertifikat und SSH-Tunnel. - Abfragen mit Konsistenzstufe, Paging über
paging_state, vorbereitete Anweisungen für gebundene Werte, Batches logged und unlogged und Tracing auf Wunsch. - Alle CQL-Typen, so geschrieben, wie
cqlshsie schreibt. - Ein Treiber für beide Server:
OPTIONSwird vor der Anmeldung beantwortet, und die SchlüsselSCYLLA_*in dieser Antwort sagen Calíope, mit welchem der beiden es spricht.
Was er nicht spricht
- Protokollversion 5 und neuer: Version 4 sprechen beide Server in jeder Version, die Calíope unterstützt.
- Komprimierung und
REGISTERmit seinen Ereignissen: Ein Desktop-Client braucht keins von beiden. - Token-basiertes Routing: Der Client spricht mit dem Kontaktpunkt des Profils oder mit dessen Alternative.
- Anmeldung über Kerberos und LDAP.
Elasticsearch und OpenSearch (REST)
Geschrieben nach
- Der Spezifikation der REST-API, die Elastic veröffentlicht, und der, die das OpenSearch-Projekt veröffentlicht, beide in einer festen Revision: die von Elastic vom 20. Oktober 2026 und die Version v0.2.0 von OpenSearch vom 25. Mai 2025.
- Ihrer öffentlichen API-Dokumentation und, wo keine genug sagt, den Servern selbst, gemessen an Elasticsearch 9.5 und OpenSearch 3.9.
- Kibana, OpenSearch Dashboards und die offiziellen Clients, in welcher Sprache auch immer, wurden nicht geöffnet.
Was er spricht
- Die REST-API über HTTP oder HTTPS auf Apples
URLSession, ohne zusätzliche Abhängigkeit, für Elasticsearch ab 8.18 und OpenSearch ab 2.19. - Anmeldung mit Benutzer und Passwort oder, in Elasticsearch, mit API-Schlüssel; und
GET /beim Verbinden, dessen Antwort Calíope sagt, mit welchem der beiden es spricht. - TLS mit eigener Zertifizierungsstelle und optionalem Client-Zertifikat; die Prüfung abzuschalten nur als ausdrückliche Wahl von dir, mit sichtbarer Warnung; und SSH-Tunnel.
- Query DSL und die Tabellensprachen jedes Produkts: SQL in beiden, ES|QL in Elasticsearch, PPL in OpenSearch.
- Einen Snapshot wiederherstellen, unter Snapshots mit Wiederherstellen: die Indizes, die du auswählst, auf Wunsch unter einem anderen Namen (
rename_pattern), und den globalen Zustand des Clusters nur, wenn du ihn anforderst.
Was er nicht spricht
- Was zu Kibana oder OpenSearch Dashboards gehört: Dashboards, Visualisierungen, Discover und Alerting.
- Neu indexieren, Lebenszyklus-Richtlinien, Vorlagen oder Pipelines bearbeiten und die Replikation zwischen Clustern: Calíope zeigt sie und überlässt das Ändern dem Server.
- Maschinelles Lernen und Vektorsuche nach Ähnlichkeit: Vektorfelder werden angezeigt, nicht abgefragt.
- Funktionen, die eine kostenpflichtige Lizenz verlangen.