2023-02-02 17:15:17 -08:00
|
|
|
-- Copyright (c) HashiCorp, Inc.
|
2021-06-22 22:26:26 -04:00
|
|
|
-- SPDX-License-Identifier: BUSL-1.1
|
2023-02-02 17:15:17 -08:00
|
|
|
|
2021-06-22 22:26:26 -04:00
|
|
|
begin;
|
|
|
|
|
|
|
|
|
|
create table session_credential_dynamic (
|
|
|
|
|
session_id wt_public_id not null
|
|
|
|
|
constraint session_fkey
|
|
|
|
|
references session (public_id)
|
|
|
|
|
on delete cascade
|
|
|
|
|
on update cascade,
|
|
|
|
|
library_id wt_public_id not null
|
|
|
|
|
constraint credential_library_fkey
|
|
|
|
|
references credential_library (public_id)
|
|
|
|
|
on delete cascade
|
|
|
|
|
on update cascade,
|
|
|
|
|
credential_id wt_public_id
|
|
|
|
|
constraint credential_dynamic_fkey
|
|
|
|
|
references credential_dynamic (public_id)
|
|
|
|
|
on delete cascade
|
|
|
|
|
on update cascade,
|
|
|
|
|
credential_purpose text not null
|
|
|
|
|
constraint credential_purpose_fkey
|
|
|
|
|
references credential_purpose_enm (name)
|
|
|
|
|
on delete restrict
|
|
|
|
|
on update cascade,
|
|
|
|
|
primary key(session_id, library_id, credential_purpose),
|
|
|
|
|
create_time wt_timestamp,
|
|
|
|
|
constraint session_credential_dynamic_credential_id_uq
|
|
|
|
|
unique(credential_id)
|
|
|
|
|
);
|
|
|
|
|
comment on table session_credential_dynamic is
|
|
|
|
|
'session_credential_dynamic is a join table between the session and dynamic credential tables. '
|
|
|
|
|
'It also contains the credential purpose the relationship represents.';
|
|
|
|
|
|
|
|
|
|
create trigger default_create_time_column before insert on session_credential_dynamic
|
|
|
|
|
for each row execute procedure default_create_time();
|
|
|
|
|
|
|
|
|
|
create trigger immutable_columns before update on session_credential_dynamic
|
|
|
|
|
for each row execute procedure immutable_columns('session_id', 'library_id', 'credential_purpose', 'create_time');
|
|
|
|
|
|
|
|
|
|
-- revoke_credentials revokes any active credentials for a session when the
|
|
|
|
|
-- session enters the canceling or terminated states.
|
2022-08-08 18:17:57 -04:00
|
|
|
create function revoke_credentials() returns trigger
|
2021-06-22 22:26:26 -04:00
|
|
|
as $$
|
|
|
|
|
begin
|
|
|
|
|
if new.state in ('canceling', 'terminated') then
|
|
|
|
|
update credential_vault_credential
|
|
|
|
|
set status = 'revoke'
|
|
|
|
|
where session_id = new.session_id
|
|
|
|
|
and status = 'active';
|
|
|
|
|
end if;
|
|
|
|
|
return new;
|
|
|
|
|
end;
|
|
|
|
|
$$ language plpgsql;
|
2022-08-08 18:17:57 -04:00
|
|
|
|
2021-06-22 22:26:26 -04:00
|
|
|
create trigger revoke_credentials after insert on session_state
|
|
|
|
|
for each row execute procedure revoke_credentials();
|
|
|
|
|
|
|
|
|
|
commit;
|