Zum Inhalt springen
hs-sql-agent
2.0.2
Dokumentation 2.0.2
Dokumentation Betrieb

Konfigurationsreferenz

Quellcodegestützte Referenz für Umgebungsvariablen und Laufzeitkonfiguration von hs-sql-agent 2.0.2.

Einzelinstanz Mit .env.example beginnen und prozesslokale Provider verwenden, solange Zustand nicht geteilt werden muss.
Verteilt Postgres für die Steuerungsebene sowie Redis für Cache, Limits, Policy-Sync, Delivery-Sync und SQL Concurrency verwenden.
Eingebettetes .NET Neue Integrationen konfigurieren Capability-spezifische Options; HsSqlAgentServiceOptions bleibt nur für Legacy-Kompatibilität erhalten.

Die eingecheckte v2.0.2 .env.example ist die betriebliche Variablenliste für den standardmäßigen Compose-Pfad. Diese Seite übernimmt die Variablennamen daraus; wenn Beispielkommentar und Laufzeitvalidierung voneinander abweichen, ist der ausführbare Code von v2.0.2 maßgeblich.

Anwendung und Steuerungsebene

VariableBeispiel/Standard in .env.exampleZweck
ASPNETCORE_URLShttp://+:8080Haupt-Listener von ASP.NET Core
ALLOWED_HOSTS*ASP.NET-Core-Host-Filter
ADMIN_DATABASE_PROVIDERSqliteDatenbank-Provider für Admin/Steuerungsebene
ADMIN_DATABASE_CONNECTION_STRINGData Source=/app/data/hsqlagent.dbSpeichert Konten, Rollen, Schlüssel, Audit-Einträge, Richtlinien und weiteren Control-Plane-Zustand
HMAC_KEYPlatzhalterHMAC-Secret zum Schutz/Prüfen ausgestellter MCP-Schlüssel; ≥32 Bytes
MCP_PUBLIC_ENDPOINThttp://localhost:8080/mcpAbsoluter Endpunkt, der in erzeugte MCP-Client-Konfigurationen geschrieben wird

MCP_PUBLIC_ENDPOINT muss eine absolute HTTP- oder HTTPS-URL sein. In Produktion muss dies die URL sein, die der Client tatsächlich erreicht, einschließlich /mcp, nicht eine interne Container-Adresse.

Topologie der Admin-Datenbank

Das Einzelinstanz-Beispiel verwendet SQLite, das verteilte Beispiel PostgreSQL:

ADMIN_DATABASE_PROVIDER=Postgres
ADMIN_DATABASE_CONNECTION_STRING=Host=postgres;Port=5432;Database=hsqlagent;Username=postgres;Password=...

Verwenden Sie eine gemeinsame Admin-Datenbank, wenn mehrere hs-sql-agent-Instanzen dieselben Identitäten, Schlüssel, Richtlinien sowie Audit-/Control-Plane-Datensätze sehen müssen.

Cache

VariableEinzelinstanzVerteiltZweck
CACHE_PROVIDERMemoryRedisLaufzeit-Cache-Provider
CACHE_CONNECTION_STRINGleerredis:6379Redis-Verbindung bei Auswahl von Redis
CACHE_KEY_PREFIXhsqlagent:cache:gleichNamespace für Cache-Keys

Prozesslokales Memory ist nur geeignet, wenn Cache-Zustand nicht zwischen Anwendungsinstanzen geteilt werden muss.

Bootstrap / automatische Provisionierung

VariableBeispielZweck
BOOTSTRAP_ENABLEDfalseProvisionierung/Synchronisierung beim Start aktivieren
BOOTSTRAP_DB_IDdefault-dbStabile Bootstrap-Identität der initialen Datenbank
BOOTSTRAP_DB_NAMEDefault DBAnzeigename der Datenbank in der Admin UI
BOOTSTRAP_DB_PROVIDERleerZu provisionierender Provider
BOOTSTRAP_DB_HOSTlocalhostDatenbank-Host
BOOTSTRAP_DB_PORT5432Datenbank-Port
BOOTSTRAP_DB_DATABASEmydbDatenbank-/Katalog-/Dateiwert
BOOTSTRAP_DB_USERNAMEmyuserDatenbank-Benutzername
BOOTSTRAP_DB_PASSWORDmypasswordDatenbank-Passwort
BOOTSTRAP_DB_EXTRA_SETTINGSleerProvider-spezifische Verbindungseinstellungen
BOOTSTRAP_MCP_KEY_IDdefault-keyStabile Bootstrap-Identität des initialen MCP-Schlüssels
BOOTSTRAP_MCP_KEY_NAMEDefault MCP KeyAnzeigename des Schlüssels in der Admin UI
BOOTSTRAP_MCP_KEYPlatzhalterInitialer Raw-Key-Wert
BOOTSTRAP_MCP_ALLOWED_TOOLSleerTool-Einschränkung für den Bootstrap-Schlüssel

Per Bootstrap verwaltete MCP-Schlüssel lassen sich bewusst nicht über den normalen Key-Lebenszyklus bearbeiten, rotieren oder widerrufen. Ändern Sie stattdessen ihre Quellkonfiguration.

Admin-Authentifizierung

VariableBeispielZweck
JWT_KEYPlatzhalterJWT-Signing-Secret; ≥32 Bytes
JWT_ISSHS-AgentJWT Issuer
JWT_AUDHS-Agent-UsersJWT Audience
JWT_ACCESS_TOKEN_EXPIRATION_MINUTES10Lebensdauer des Access Tokens
JWT_REFRESH_TOKEN_EXPIRATION_DAYS1Lebensdauer des Refresh Tokens
AUTH_LOCKOUT_THRESHOLD5Fehlgeschlagene Logins vor temporärer Sperre; Werte unter 1 werden als 1 behandelt
AUTH_LOCKOUT_MINUTES15Dauer der temporären Sperre

Diese Einstellungen steuern Admin-Authentifizierung, nicht die Authentifizierung mit MCP-Schlüsseln.

Passwort-Reset und SMTP

Passwort-Reset per E-Mail ist effektiv deaktiviert, wenn SMTP-Host oder Absender leer ist.

VariableBeispielZweck
PASSWORD_RESET_BASE_URLhttp://localhost:3000/reset-passwordVon außen erreichbare Reset-Seite; Server hängt ?token=... an
PASSWORD_RESET_EXPIRATION_MINUTES30Lebensdauer des einmaligen Reset Tokens
SMTP_HOSTsmtp.example.comSMTP-Host
SMTP_PORT587SMTP-Port
SMTP_ENABLE_SSLtrueSSL-/STARTTLS-Verhalten des Mail-Senders
SMTP_USERNAMEBeispielSMTP-Zugangsdaten
SMTP_PASSWORDBeispielSMTP-Zugangsdaten
SMTP_FROMno-reply@example.comVom SMTP-Provider akzeptierte Absenderadresse

OIDC / SSO und MFA

VariableBeispielZweck
OIDC_ENABLEDfalseOIDC-Authentifizierung aktivieren
OIDC_AUTHORITYleerAuthority des Identity Providers
OIDC_CLIENT_IDleerOIDC Client ID
OIDC_CLIENT_SECRETleerOIDC Client Secret
OIDC_REQUIRE_HTTPS_METADATAtrueHTTPS für Discovery-Metadaten verlangen
OIDC_EMAIL_CLAIMemailName des E-Mail-Claims
OIDC_NAME_CLAIMnameClaim für den Anzeigenamen
OIDC_ROLE_CLAIMrolesRole Claim
OIDC_EMAIL_VERIFIED_CLAIMemail_verifiedClaim für verifizierte E-Mail
OIDC_REQUIRE_VERIFIED_EMAILtrueIdentitäten ohne verifizierte E-Mail anhand des konfigurierten Claims ablehnen
OIDC_SCOPE_0..2openid, profile, emailStandard-Scopes
OIDC_ROLE_MAPPING_SQL_ADMINSSuperUserBeispiel für externes Rollen-Mapping auf lokale Rolle
OIDC_AUTO_PROVISIONtrueBenutzer nach erfolgreicher externer Identitätsauflösung automatisch provisionieren
OIDC_FRONTEND_CALLBACK_URL/sso-callbackAbschlussroute im Frontend
OIDC_LOGIN_CODE_EXPIRATION_MINUTES2Lebensdauer des kurzlebigen Login-Codes
OIDC_TOTP_ISSUERHS SQL AgentTOTP-Issuer-Label
DATA_PROTECTION_KEY_PATH/app/data/data-protection-keysVerzeichnis für persistente ASP.NET-Core-Data-Protection-Keys

Siehe OIDC SSO und TOTP MFA.

Health, Slow Queries, Zustellung und Audit-Aufbewahrung

VariableBeispielZweck
HEALTH_PROBE_ENABLEDfalseHintergrundprüfung des DB-Zustands aktivieren
HEALTH_PROBE_INTERVAL_SECONDS60Prüfintervall
HEALTH_PROBE_TIMEOUT_SECONDS10Timeout pro Prüfung
HEALTH_PROBE_MAX_CONCURRENCY4Maximale parallele Prüfungen
SLOW_QUERY_THRESHOLD_MS1000Queries ab dieser Dauer werden als langsam erfasst
ALERT_WEBHOOK_URLleerOptionales signiertes Alert-Ziel
ALERT_WEBHOOK_SECRETleerHMAC-/Signing-Secret; ≥32 Bytes bei aktivierter URL
SIEM_WEBHOOK_URLleerOptionales signiertes SIEM-Ziel
SIEM_WEBHOOK_SECRETleerHMAC-/Signing-Secret; ≥32 Bytes bei aktivierter URL
DELIVERY_MAX_ATTEMPTS6Maximale Retry-Anzahl für ausgehende Zustellungen
DELIVERY_MAX_CONCURRENCY4Maximale parallele ausgehende Zustellungen
AUDIT_RETENTION_DAYS90Aufbewahrungsdauer; 0 deaktiviert automatische Retention
AUDIT_RETENTION_MODEArchiveGültige Laufzeitwerte: Archive oder Purge
AUDIT_ARCHIVE_PATH/app/data/audit-archiveArchivziel im Modus Archive
AUDIT_FALLBACK_PATH/app/data/audit-fallback.jsonlAudit-Fallback-Pfad; durch Startvalidierung erforderlich
AUDIT_RETENTION_RUN_HOUR_UTC2Geplante UTC-Stunde; Laufzeit begrenzt auf 0–23

Archive schreibt abgelaufene Audit-Zeilen in ein JSONL-Archiv, bevor sie aus der Admin-Datenbank gelöscht werden. Purge löscht passende abgelaufene Zeilen ohne dieses Archiv.

Globales und schlüsselbezogenes Rate Limiting

VariableEinzelinstanzVerteiltZweck
RATE_LIMITING_PERMIT_LIMIT00Globales IP-Permit-Limit; 0 bei ebenfalls null gesetztem Fenster bedeutet unbegrenzt
RATE_LIMITING_WINDOW_SECONDS00Globales IP-Zeitfenster
RATE_LIMITER_PROVIDERMemoryRedisImplementierung des gemeinsamen Limiters
RATE_LIMITER_CONNECTION_STRINGleerredis:6379Redis-Verbindung
RATE_LIMITER_FAILURE_MODEFailClosedFailClosedVerhalten bei Ausfall des verteilten Limiters
RATE_LIMITER_KEY_PREFIXhsqlagent:ratelimit:gleichRedis-Key-Namespace

MCP-Schlüssel können ihre Limits zusätzlich erben, überschreiben oder deaktivieren. Siehe MCP-Schlüssel.

Synchronisierung der Laufzeitrichtlinie

VariableEinzelinstanzVerteiltZweck
SECURITY_POLICY_SYNC_PROVIDERMemoryRedisProvider für Synchronisierung der Laufzeitrichtlinie
SECURITY_POLICY_SYNC_CONNECTION_STRINGleerredis:6379Redis-Verbindung
SECURITY_POLICY_SYNC_KEY_PREFIXhsqlagent:security-policy:gleichKey-Namespace
SECURITY_POLICY_SYNC_REFRESH_INTERVAL_SECONDS3030Refresh-Intervall

Wählen Sie Redis, wenn Richtlinienänderungen über mehrere hs-sql-agent-Instanzen verteilt werden müssen.

Synchronisierung ausgehender Zustellungen

VariableEinzelinstanzVerteiltZweck
OUTBOUND_DELIVERY_SYNC_PROVIDERMemoryRedisKoordination von Zustellungssignalen
OUTBOUND_DELIVERY_SYNC_CONNECTION_STRINGleerredis:6379Redis-Verbindung
OUTBOUND_DELIVERY_SYNC_KEY_PREFIXhsqlagent:outbound-delivery:gleichKey-Namespace

Koordination der SQL-Parallelität

VariableEinzelinstanzVerteiltZweck
SQL_CONCURRENCY_PROVIDERMemoryRedisProvider für SQL-Concurrency-Limiter
SQL_CONCURRENCY_CONNECTION_STRINGleerredis:6379Redis-Verbindung
SQL_CONCURRENCY_FAILURE_MODEFailClosedFailClosedVerhalten, wenn verteilte Koordination fehlschlägt
SQL_CONCURRENCY_KEYhsqlagent:sql-concurrencygleichGemeinsamer Koordinations-Key
SQL_CONCURRENCY_LEASE_SECONDS3030Lease-Dauer

Metadata Discovery, Queries, DML-Planung/-Ausführung und Health-bezogene SQL-Arbeit laufen über begrenzte Laufzeitpfade. Verwenden Sie verteilte SQL Concurrency, wenn das Limit für den gesamten Cluster statt pro Prozess gelten muss.

Observability

VariableBeispielZweck
PROMETHEUS_ENABLEDfalsePrometheus-HTTP-Listener aktivieren
PROMETHEUS_HOST0.0.0.0Bind-Host des Metrics-Listeners
PROMETHEUS_PORT9000Separater Metrics-Port; bei Aktivierung auf 1–65535 validiert
OTLP_ENDPOINTleerAbsoluter HTTP(S)-Endpunkt eines OTLP Collectors
OTEL_SERVICE_NAMEhs-sql-agentOpenTelemetry-Service-Name; darf nicht leer sein

Prometheus läuft bewusst auf einem separaten Listener, nicht auf dem Admin-/MCP-Anwendungsport. Ist OTLP_ENDPOINT gesetzt, exportiert v2.0.2 Telemetrie einschließlich SQL-Compile-Evidence-Tracing-/Logging-Integration.

Siehe Observability und Audit-Betrieb.

Logging

VariableBeispiel
LOGGING_EFCORE_COMMAND_LOGLEVELWarning
LOGGING_DEFAULT_LOGLEVELInformation
LOGGING_ASPNETCORE_LOGLEVELWarning

Routine-EF-Core-Command-Logging auf Warning reduziert unnötige SQL-Command-Traces im normalen Produktionsbetrieb.

Docker-Umgebung und Capability-Options für eingebettetes .NET

Die Docker-/ToolBox-Umgebung ist eine vollständige Konfigurationsoberfläche für den eigenständigen Server. Neue NuGet-Integrationen funktionieren anders: AddHsSqlAgentCore() besitzt keine Options; jede ausgewählte Capability verwaltet nur ihre eigenen Einstellungen.

Beispiele:

  • HsSqlAgentAdminStoreOptions verwaltet Admin-Datenbank-Provider und Connection String;
  • HsSqlAgentRuntimeOptions verwaltet Cache, Rate Limiting, Synchronisierung, SQL Concurrency, DML Approval Storage, Bootstrap und Operability;
  • HsSqlAgentBuiltInAuthOptions verwaltet JWT, Passwort-Reset/SMTP und Enterprise Identity/OIDC;
  • McpOptions verwaltet öffentlichen MCP-Endpunkt und HMAC-Secret;
  • TelemetryOptions verwaltet Prometheus- und OTLP-Einstellungen.

HsSqlAgentServiceOptions bleibt nur als Legacy-Aggregat-Kompatibilitäts-DTO erhalten. Nicht ausgewählte Capabilities erzeugen oder validieren ihre Options nicht. Ein eingebetteter Host mit AddHsSqlAgentHostAuthorization(...) benötigt daher keine HsSqlAgent-JWT-, SMTP-, Passwort-Reset- oder OIDC-Einstellungen.

Die modulare API erhält bestehende Code-Standardwerte. .env.example ist ein Deployment-Beispiel für den eigenständigen ToolBox-Pfad und bedeutet nicht, dass jeder eingebettete Host jede Capability konfigurieren muss.

Siehe ASP.NET-Core-Integration.