BEGIN; SET ROLE identity_role; CREATE TABLE IF NOT EXISTS identity.service_principals ( principal_id TEXT PRIMARY KEY, actor_id TEXT NOT NULL, kind TEXT NOT NULL CHECK (kind = 'SERVICE'), purpose TEXT NOT NULL, synthetic_scope TEXT NOT NULL, active BOOLEAN NOT NULL DEFAULT TRUE, revision BIGINT NOT NULL DEFAULT 1, recorded_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP, CHECK (principal_id <> '' AND actor_id <> '' AND purpose <> '' AND synthetic_scope <> '' AND revision > 0) ); CREATE UNIQUE INDEX IF NOT EXISTS service_principals_actor_idx ON identity.service_principals(actor_id); INSERT INTO identity.service_principals(principal_id, actor_id, kind, purpose, synthetic_scope) VALUES ('domovoy-acceptance-harness-principal', 'domovoy-acceptance-harness-actor', 'SERVICE', 'AUTHENTICATE_ACCEPTANCE_HARNESS', 'synthetic-acceptance-scope') ON CONFLICT (principal_id) DO NOTHING; INSERT INTO identity.actors(actor_id, display_name) VALUES ('domovoy-acceptance-harness-actor', 'Domovoy Acceptance Harness') ON CONFLICT (actor_id) DO NOTHING; INSERT INTO identity.principals(principal_id, display_name) VALUES ('domovoy-acceptance-harness-principal', 'Domovoy Acceptance Harness Principal') ON CONFLICT (principal_id) DO NOTHING; INSERT INTO identity.principal_bindings(actor_id, principal_id, active) VALUES ('domovoy-acceptance-harness-actor', 'domovoy-acceptance-harness-principal', TRUE) ON CONFLICT (actor_id, principal_id) DO UPDATE SET active=TRUE; REVOKE ALL ON identity.service_principals FROM PUBLIC; GRANT SELECT ON identity.service_principals TO identity_role; RESET ROLE; COMMIT;