Files
teleport/lib/srv/db/postgres/sql/deactivate-user.sql
T
Gabriel Corado 0daeb99f90 Use pg_temp to store PostgreSQL auto provisioning procedures (#44255)
* refactor(postgres): use pg_temp to store auto user procedures

* refactor(postgres): code review suggestions

* test(postgres): replace logrus with slog

* chore(postgres): move switch statement to a map

* test(postgres): with wrong slog call

* test(postgres): use slog context functions
2024-07-18 18:29:29 +00:00

20 lines
806 B
PL/PgSQL

CREATE OR REPLACE PROCEDURE pg_temp.teleport_deactivate_user(username varchar)
LANGUAGE plpgsql
AS $$
DECLARE
role_ varchar;
BEGIN
-- Only deactivate if the user doesn't have other active sessions.
IF EXISTS (SELECT usename FROM pg_stat_activity WHERE usename = username) THEN
RAISE NOTICE 'User has active connections';
ELSE
-- Revoke all role memberships except teleport-auto-user group.
FOR role_ IN SELECT a.rolname FROM pg_roles a WHERE pg_has_role(username, a.oid, 'member') AND a.rolname NOT IN (username, 'teleport-auto-user')
LOOP
EXECUTE FORMAT('REVOKE %I FROM %I', role_, username);
END LOOP;
-- Disable ability to login for the user.
EXECUTE FORMAT('ALTER USER %I WITH NOLOGIN', username);
END IF;
END;$$;