Initial commit: ESB Certificate Manager.

EOF

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-24 08:10:13 +02:00
co-authored by Cursor
commit ed8e2822d1
36 changed files with 5111 additions and 0 deletions
@@ -0,0 +1,157 @@
/*
ESB Certificate Manager Zielkonfiguration (SQL Server)
Offline vorbereitet; zur späteren Nutzung auf dem Ziel-SQL-Server ausführen.
*/
IF OBJECT_ID(N'dbo.SonicConnection', N'U') IS NULL
BEGIN
CREATE TABLE dbo.SonicConnection
(
Id INT NOT NULL IDENTITY(1, 1),
Name NVARCHAR(128) NOT NULL, -- Eindeutiger Bezeichner, referenziert von DeploymentTarget
DomainName NVARCHAR(128) NOT NULL, -- Sonic-Domain-Name, z.B. "proalpha-test"
ManagementUrl NVARCHAR(512) NOT NULL, -- HTTP-URL der Management Console, z.B. "http://host:8080"
ApiBasePath NVARCHAR(128) NOT NULL CONSTRAINT DF_SonicConnection_ApiBasePath DEFAULT (N'/api/v1'),
Username NVARCHAR(128) NOT NULL,
-- Passwort wird in der Anwendung verschlüsselt gespeichert; hier nur als Verweis
PasswordHash NVARCHAR(512) NOT NULL CONSTRAINT DF_SonicConnection_PwdHash DEFAULT (N''),
TimeoutSeconds INT NOT NULL CONSTRAINT DF_SonicConnection_Timeout DEFAULT (30),
PostRestartDelaySecs INT NOT NULL CONSTRAINT DF_SonicConnection_Delay DEFAULT (15),
IsActive BIT NOT NULL CONSTRAINT DF_SonicConnection_IsActive DEFAULT (1),
CONSTRAINT PK_SonicConnection PRIMARY KEY CLUSTERED (Id),
CONSTRAINT UQ_SonicConnection_Name UNIQUE (Name)
);
END
GO
IF OBJECT_ID(N'dbo.DeploymentTarget', N'U') IS NULL
BEGIN
CREATE TABLE dbo.DeploymentTarget
(
Id INT NOT NULL IDENTITY(1, 1),
Name NVARCHAR(128) NOT NULL,
Environment NVARCHAR(64) NOT NULL,
IsActive BIT NOT NULL CONSTRAINT DF_DeploymentTarget_IsActive DEFAULT (1),
TargetDirectory NVARCHAR(512) NOT NULL,
CertificateFileName NVARCHAR(260) NOT NULL,
ContainerName NVARCHAR(128) NOT NULL CONSTRAINT DF_DeploymentTarget_Container DEFAULT (N''),
RestartType NVARCHAR(32) NOT NULL CONSTRAINT DF_DeploymentTarget_RestartType DEFAULT (N'None'),
RestartCommand NVARCHAR(512) NOT NULL CONSTRAINT DF_DeploymentTarget_RestartCmd DEFAULT (N''),
RestartArguments NVARCHAR(1024) NOT NULL CONSTRAINT DF_DeploymentTarget_RestartArgs DEFAULT (N''),
RestartTimeoutSeconds INT NOT NULL CONSTRAINT DF_DeploymentTarget_RestartTimeout DEFAULT (60),
-- Sonic ESB Management
SonicConnectionName NVARCHAR(128) NOT NULL CONSTRAINT DF_DeploymentTarget_SonicConn DEFAULT (N''),
XapiSourcePath NVARCHAR(512) NOT NULL CONSTRAINT DF_DeploymentTarget_XapiSrc DEFAULT (N''),
-- TLS-Probe
TlsHost NVARCHAR(255) NOT NULL CONSTRAINT DF_DeploymentTarget_TlsHost DEFAULT (N''),
TlsPort INT NULL,
SortOrder INT NOT NULL CONSTRAINT DF_DeploymentTarget_SortOrder DEFAULT (0),
CONSTRAINT PK_DeploymentTarget PRIMARY KEY CLUSTERED (Id),
CONSTRAINT CK_DeploymentTarget_RestartType CHECK (
RestartType IN (N'None', N'Command', N'SonicContainer', N'SonicContainerWithXapi')
)
);
END
ELSE
BEGIN
-- Neue Spalten zu bestehender Tabelle hinzufügen (idempotent)
IF NOT EXISTS (SELECT 1 FROM sys.columns
WHERE object_id = OBJECT_ID(N'dbo.DeploymentTarget')
AND name = N'SonicConnectionName')
BEGIN
ALTER TABLE dbo.DeploymentTarget
ADD SonicConnectionName NVARCHAR(128) NOT NULL
CONSTRAINT DF_DeploymentTarget_SonicConn DEFAULT (N'');
END
IF NOT EXISTS (SELECT 1 FROM sys.columns
WHERE object_id = OBJECT_ID(N'dbo.DeploymentTarget')
AND name = N'XapiSourcePath')
BEGIN
ALTER TABLE dbo.DeploymentTarget
ADD XapiSourcePath NVARCHAR(512) NOT NULL
CONSTRAINT DF_DeploymentTarget_XapiSrc DEFAULT (N'');
END
-- CHECK-Constraint um neue RestartType-Werte erweitern
IF EXISTS (SELECT 1 FROM sys.check_constraints
WHERE parent_object_id = OBJECT_ID(N'dbo.DeploymentTarget')
AND name = N'CK_DeploymentTarget_RestartType')
BEGIN
ALTER TABLE dbo.DeploymentTarget DROP CONSTRAINT CK_DeploymentTarget_RestartType;
ALTER TABLE dbo.DeploymentTarget ADD CONSTRAINT CK_DeploymentTarget_RestartType
CHECK (RestartType IN (N'None', N'Command', N'SonicContainer', N'SonicContainerWithXapi'));
END
END
GO
IF OBJECT_ID(N'dbo.DeploymentRunHistory', N'U') IS NULL
BEGIN
CREATE TABLE dbo.DeploymentRunHistory
(
Id BIGINT NOT NULL IDENTITY(1, 1),
StartedAtUtc DATETIME2(3) NOT NULL,
FinishedAtUtc DATETIME2(3) NULL,
UserName NVARCHAR(128) NOT NULL,
MachineName NVARCHAR(128) NOT NULL CONSTRAINT DF_DeploymentRunHistory_Machine DEFAULT (N''),
OverallSuccess BIT NULL,
Summary NVARCHAR(2000) NULL,
CONSTRAINT PK_DeploymentRunHistory PRIMARY KEY CLUSTERED (Id)
);
END
ELSE
BEGIN
IF NOT EXISTS (SELECT 1 FROM sys.columns
WHERE object_id = OBJECT_ID(N'dbo.DeploymentRunHistory')
AND name = N'MachineName')
BEGIN
ALTER TABLE dbo.DeploymentRunHistory
ADD MachineName NVARCHAR(128) NOT NULL
CONSTRAINT DF_DeploymentRunHistory_Machine DEFAULT (N'');
END
END
GO
IF OBJECT_ID(N'dbo.DeploymentRunDetail', N'U') IS NULL
BEGIN
CREATE TABLE dbo.DeploymentRunDetail
(
Id BIGINT NOT NULL IDENTITY(1, 1),
RunId BIGINT NOT NULL,
TargetId INT NOT NULL,
TargetName NVARCHAR(128) NOT NULL,
Success BIT NOT NULL,
StatusText NVARCHAR(256) NOT NULL,
Detail NVARCHAR(2000) NULL,
Steps NVARCHAR(MAX) NULL,
CONSTRAINT PK_DeploymentRunDetail PRIMARY KEY CLUSTERED (Id),
CONSTRAINT FK_DeploymentRunDetail_Run
FOREIGN KEY (RunId) REFERENCES dbo.DeploymentRunHistory (Id)
);
END
GO
/*
Beispiel-Insert:
INSERT INTO dbo.SonicConnection (Name, DomainName, ManagementUrl, Username, PasswordHash)
VALUES (N'DE-Test', N'proalpha-test', N'http://dekun-painwbdet:8080', N'Administrator', N'<encrypted>');
INSERT INTO dbo.DeploymentTarget
(
Name, Environment, IsActive, TargetDirectory, CertificateFileName,
ContainerName, RestartType, SonicConnectionName,
TlsHost, TlsPort, SortOrder
)
VALUES
(
N'DE-Test Container A', N'TEST', 1, N'\\share\esb\certs\a', N'esb-cert.cer',
N'sonic-container-a', N'SonicContainer', N'DE-Test',
N'dekun-painwbdet', 13070, 10
),
(
N'DE-Test Container B (XApi)', N'TEST', 1, N'\\share\esb\certs\b', N'esb-cert.cer',
N'sonic-container-b', N'SonicContainerWithXapi', N'DE-Test',
N'dekun-painwbdet', 13070, 20
);
*/
@@ -0,0 +1,193 @@
/*
ESB Certificate Manager vollständiges Datenbankschema v2
Idempotent; kann auf einem leeren Schema oder nach 001_CreateSchema.sql ausgeführt werden.
Tabellen:
dbo.SonicConnection Sonic-ESB-Management-Instanzen
dbo.DeploymentTargets Deployment-Ziele mit allen Konfigurationsfeldern
dbo.DeploymentRuns Ein Eintrag pro Deployment-Lauf
dbo.DeploymentTargetResults Detailergebnis pro Ziel und Lauf
Always Encrypted (optional):
Zur Nutzung von Always Encrypted auf der Spalte PasswordHash in SonicConnection
die Blöcke unterhalb des Kommentars "-- ALWAYS ENCRYPTED" auskommentieren
und den Schlüsselnamen anpassen.
*/
-- ============================================================
-- SonicConnection
-- ============================================================
IF OBJECT_ID(N'dbo.SonicConnection', N'U') IS NULL
BEGIN
CREATE TABLE dbo.SonicConnection
(
Id INT NOT NULL IDENTITY(1, 1),
Name NVARCHAR(128) NOT NULL, -- Eindeutiger Bezeichner, referenziert von DeploymentTargets
DomainName NVARCHAR(128) NOT NULL, -- Sonic-Domain, z.B. "proalpha-test"
ConnectionUrl NVARCHAR(512) NOT NULL, -- Sonic-Broker-URL, z.B. "tcp://dekun-painwbdet:13070"
ManagementHttpPort INT NOT NULL CONSTRAINT DF_SonicConnection_HttpPort DEFAULT (8080),
ApiBasePath NVARCHAR(128) NOT NULL CONSTRAINT DF_SonicConnection_ApiBase DEFAULT (N'/api/v1'),
Username NVARCHAR(128) NOT NULL,
PasswordHash NVARCHAR(512) NOT NULL CONSTRAINT DF_SonicConnection_PwdHash DEFAULT (N''),
-- ALWAYS ENCRYPTED: PasswordEncrypted NVARCHAR(512) ENCRYPTED WITH (
-- COLUMN_ENCRYPTION_KEY = CEK_SonicPwd,
-- ENCRYPTION_TYPE = DETERMINISTIC,
-- ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'
-- ) NULL,
TimeoutSeconds INT NOT NULL CONSTRAINT DF_SonicConnection_Timeout DEFAULT (30),
PostRestartDelaySecs INT NOT NULL CONSTRAINT DF_SonicConnection_Delay DEFAULT (15),
IsActive BIT NOT NULL CONSTRAINT DF_SonicConnection_Active DEFAULT (1),
CONSTRAINT PK_SonicConnection PRIMARY KEY CLUSTERED (Id),
CONSTRAINT UQ_SonicConnection_Name UNIQUE (Name)
);
END
ELSE
BEGIN
-- ConnectionUrl-Spalte nachrüsten (Migration von ManagementUrl)
IF NOT EXISTS (SELECT 1 FROM sys.columns
WHERE object_id = OBJECT_ID(N'dbo.SonicConnection') AND name = N'ConnectionUrl')
BEGIN
ALTER TABLE dbo.SonicConnection ADD ConnectionUrl NVARCHAR(512) NOT NULL
CONSTRAINT DF_SonicConnection_ConnUrl DEFAULT (N'');
END
IF NOT EXISTS (SELECT 1 FROM sys.columns
WHERE object_id = OBJECT_ID(N'dbo.SonicConnection') AND name = N'ManagementHttpPort')
BEGIN
ALTER TABLE dbo.SonicConnection ADD ManagementHttpPort INT NOT NULL
CONSTRAINT DF_SonicConnection_HttpPort DEFAULT (8080);
END
END
GO
-- ============================================================
-- DeploymentTargets
-- ============================================================
IF OBJECT_ID(N'dbo.DeploymentTargets', N'U') IS NULL
BEGIN
CREATE TABLE dbo.DeploymentTargets
(
Id INT NOT NULL IDENTITY(1, 1),
Name NVARCHAR(100) NOT NULL,
Environment NVARCHAR(64) NOT NULL CONSTRAINT DF_DT_Env DEFAULT (N''),
IsActive BIT NOT NULL CONSTRAINT DF_DT_IsActive DEFAULT (1),
-- Zertifikat-Ablage
CertificateTargetPath NVARCHAR(500) NOT NULL,
CertificateFileName NVARCHAR(260) NOT NULL CONSTRAINT DF_DT_CertFile DEFAULT (N''),
-- Neustart-Konfiguration
RestartType NVARCHAR(30) NOT NULL CONSTRAINT DF_DT_RestartType DEFAULT (N'None'),
RestartHost NVARCHAR(255) NULL,
RestartCommand NVARCHAR(2000) NULL,
RestartArguments NVARCHAR(1024) NOT NULL CONSTRAINT DF_DT_RestartArgs DEFAULT (N''),
RestartTimeoutSeconds INT NOT NULL CONSTRAINT DF_DT_RestartTimeout DEFAULT (60),
-- Sonic ESB
SonicConnectionName NVARCHAR(128) NOT NULL CONSTRAINT DF_DT_SonicConn DEFAULT (N''),
ContainerName NVARCHAR(128) NOT NULL CONSTRAINT DF_DT_Container DEFAULT (N''),
XapiSourcePath NVARCHAR(512) NOT NULL CONSTRAINT DF_DT_XapiSrc DEFAULT (N''),
-- TLS-Probe
TlsHost NVARCHAR(255) NOT NULL CONSTRAINT DF_DT_TlsHost DEFAULT (N''),
TlsPort INT NOT NULL CONSTRAINT DF_DT_TlsPort DEFAULT (443),
TlsServerName NVARCHAR(255) NOT NULL CONSTRAINT DF_DT_TlsServerName DEFAULT (N''),
ExpectedFingerprint NVARCHAR(128) NULL,
SortOrder INT NOT NULL CONSTRAINT DF_DT_SortOrder DEFAULT (0),
CONSTRAINT PK_DeploymentTargets PRIMARY KEY CLUSTERED (Id),
CONSTRAINT CK_DeploymentTargets_RestartType CHECK (
RestartType IN (N'None', N'Command', N'SonicContainer', N'SonicContainerWithXapi')
)
);
END
ELSE
BEGIN
-- Neue Spalten idempotent nachrüsten
IF NOT EXISTS (SELECT 1 FROM sys.columns WHERE object_id = OBJECT_ID(N'dbo.DeploymentTargets') AND name = N'TlsServerName')
ALTER TABLE dbo.DeploymentTargets ADD TlsServerName NVARCHAR(255) NOT NULL CONSTRAINT DF_DT_TlsServerName DEFAULT (N'');
IF NOT EXISTS (SELECT 1 FROM sys.columns WHERE object_id = OBJECT_ID(N'dbo.DeploymentTargets') AND name = N'ExpectedFingerprint')
ALTER TABLE dbo.DeploymentTargets ADD ExpectedFingerprint NVARCHAR(128) NULL;
IF NOT EXISTS (SELECT 1 FROM sys.columns WHERE object_id = OBJECT_ID(N'dbo.DeploymentTargets') AND name = N'SonicConnectionName')
ALTER TABLE dbo.DeploymentTargets ADD SonicConnectionName NVARCHAR(128) NOT NULL CONSTRAINT DF_DT_SonicConn DEFAULT (N'');
IF NOT EXISTS (SELECT 1 FROM sys.columns WHERE object_id = OBJECT_ID(N'dbo.DeploymentTargets') AND name = N'ContainerName')
ALTER TABLE dbo.DeploymentTargets ADD ContainerName NVARCHAR(128) NOT NULL CONSTRAINT DF_DT_Container DEFAULT (N'');
IF NOT EXISTS (SELECT 1 FROM sys.columns WHERE object_id = OBJECT_ID(N'dbo.DeploymentTargets') AND name = N'XapiSourcePath')
ALTER TABLE dbo.DeploymentTargets ADD XapiSourcePath NVARCHAR(512) NOT NULL CONSTRAINT DF_DT_XapiSrc DEFAULT (N'');
END
GO
-- ============================================================
-- DeploymentRuns (ein Datensatz pro Deployment-Lauf)
-- ============================================================
IF OBJECT_ID(N'dbo.DeploymentRuns', N'U') IS NULL
BEGIN
CREATE TABLE dbo.DeploymentRuns
(
Id UNIQUEIDENTIFIER NOT NULL,
StartedAtUtc DATETIME2(3) NOT NULL,
FinishedAtUtc DATETIME2(3) NULL,
SourceFile NVARCHAR(500) NOT NULL,
SourceFingerprint NVARCHAR(128) NOT NULL,
StartedBy NVARCHAR(255) NOT NULL,
MachineName NVARCHAR(255) NOT NULL CONSTRAINT DF_DR_Machine DEFAULT (N''),
OverallStatus NVARCHAR(30) NOT NULL, -- 'Running' | 'Success' | 'PartialFailure' | 'Failure'
ErrorMessage NVARCHAR(MAX) NULL,
CONSTRAINT PK_DeploymentRuns PRIMARY KEY CLUSTERED (Id)
);
END
GO
-- ============================================================
-- DeploymentTargetResults (ein Datensatz pro Ziel und Lauf)
-- ============================================================
IF OBJECT_ID(N'dbo.DeploymentTargetResults', N'U') IS NULL
BEGIN
CREATE TABLE dbo.DeploymentTargetResults
(
Id INT NOT NULL IDENTITY(1, 1),
DeploymentRunId UNIQUEIDENTIFIER NOT NULL,
TargetId INT NOT NULL,
TargetName NVARCHAR(128) NOT NULL,
StartedAtUtc DATETIME2(3) NOT NULL,
FinishedAtUtc DATETIME2(3) NULL,
CopySucceeded BIT NOT NULL CONSTRAINT DF_DTR_Copy DEFAULT (0),
RestartSucceeded BIT NOT NULL CONSTRAINT DF_DTR_Restart DEFAULT (0),
TlsSucceeded BIT NOT NULL CONSTRAINT DF_DTR_Tls DEFAULT (0),
ObservedFingerprint NVARCHAR(128) NULL,
Status NVARCHAR(30) NOT NULL,
ErrorMessage NVARCHAR(MAX) NULL,
CONSTRAINT PK_DeploymentTargetResults PRIMARY KEY CLUSTERED (Id),
CONSTRAINT FK_DTR_Run FOREIGN KEY (DeploymentRunId) REFERENCES dbo.DeploymentRuns (Id)
);
CREATE NONCLUSTERED INDEX IX_DTR_RunId ON dbo.DeploymentTargetResults (DeploymentRunId);
END
GO
-- ============================================================
-- Beispieldaten
-- ============================================================
/*
INSERT INTO dbo.SonicConnection (Name, DomainName, ConnectionUrl, Username, PasswordHash)
VALUES (N'DE-Test', N'proalpha-test', N'tcp://dekun-painwbdet:13070', N'Administrator', N'<encrypted>');
INSERT INTO dbo.DeploymentTargets
(Name, Environment, IsActive, CertificateTargetPath, CertificateFileName,
RestartType, SonicConnectionName, ContainerName,
TlsHost, TlsPort, TlsServerName, SortOrder)
VALUES
(N'DE-Test Container A', N'TEST', 1,
N'\\dekun-painwbdet\sonic\certs', N'server.pfx',
N'SonicContainer', N'DE-Test', N'sonic-container-a',
N'dekun-painwbdet', 443, N'esb-test.firma.local', 10),
(N'DE-Test Container B (XApi)', N'TEST', 1,
N'\\dekun-painwbdet\sonic\certs', N'server.pfx',
N'SonicContainerWithXapi', N'DE-Test', N'sonic-container-b',
N'dekun-painwbdet', 443, N'esb-test.firma.local', 20);
*/