Ok

En poursuivant votre navigation sur ce site, vous acceptez l'utilisation de cookies. Ces derniers assurent le bon fonctionnement de nos services. En savoir plus.

[Cloud IBM PSQL] Role creation with HVAULT

Roles creation using hvault : 

- dynamic roles

The roles are created with this command :

vault write -ns="$VAULT_NAMESPACE/$ECOSYSTEM" database/postgres/${SERVER}/roles/${ROLE} 
db_name=${SERVER}
creation_statements=@${ORA2PG_HOME}/dynamic_role/${TYPE}/create_dyna_role_${TYPE}_${ASSET}.sql
revocation_statements=@${ORA2PG_HOME}/dynamic_role/${TYPE}/drop_dyna_role_${TYPE}_${ASSET}.sql
default_ttl=${ROTATION}
max_ttl=${ROTATION}
---------------------------------------------------------------
--creation of the role : own_code_asset

--in the directory : /data/<path>/dynamic_role/own

--script : create_dyna_role_own_asset.sql
---------------------------------------------------------------

--   role OWN
DO
$do$
BEGIN

-- création du role dynamique
CREATE ROLE "{{name}}" WITH LOGIN PASSWORD '{{password}}' VALID UNTIL '{{expiration}}' INHERIT; 
GRANT "{{name}}" TO admin;  -- pour permettre de faire le "SET ROLE "{{name}}";" plus bas

-- création du schéma s'il n'existe pas déjà sinon remplacer 12345 par l'APP REFI et joss par ASSET
CREATE SCHEMA IF NOT EXISTS "<schema>";


-- rajouter la section suivante pour les instances sur l’offre PostgreSQL mais pas pour les instances sur l’offre PostgreSQL EE car pour l’instant, une limitation sur cette offre ne permet pas de créer les extensions
IF NOT EXISTS (
SELECT FROM pg_catalog.pg_extension WHERE extname = 'pg_buffercache') THEN CREATE EXTENSION "pg_buffercache";
END IF;
IF NOT EXISTS (
SELECT FROM pg_catalog.pg_extension WHERE extname = 'pg_stat_statements') THEN CREATE EXTENSION "pg_stat_statements";
END IF; 


-- création du groupe role_app_code_asset s'il n'existe pas déjà, avec droit de se connecter au schéma <schema>
IF NOT EXISTS (
SELECT FROM pg_catalog.pg_roles WHERE rolname ='role_app_code_asset') THEN 
CREATE ROLE "role_app_code_asset" NOLOGIN;
ALTER ROLE "role_app_code_asset" SET search_path TO "<schema>";
GRANT USAGE ON SCHEMA "<schema>" TO "role_app_code_asset";
END IF;

-- création du groupe role_own_code_asset s'il n'existe pas déjà, avec transfert de la propriété du schéma 
IF NOT EXISTS (SELECT FROM pg_catalog.pg_roles WHERE rolname ='role_own_code_asset') THEN 
CREATE ROLE "role_own_code_asset" NOLOGIN;
ALTER ROLE "role_own_code_asset" SET search_path TO "<schema>";
GRANT "role_own_code_asset" TO admin; -- permet de faire le changement de owner du schéma en dessous
ALTER SCHEMA "<schema>" OWNER TO "role_own_code_asset";
END IF;

-- rattachement du user own_code_asset au groupe role_own_code_asset
GRANT "role_own_code_asset" TO "{{name}}";

-- don des droits de manipulation des objets du schéma au groupe role_app_code_asset
SET ROLE "role_own_code_asset"; -- Les ALTER DEFAULT PRIVILEGE doivent être exécutés par le créateur des objets
ALTER DEFAULT PRIVILEGES IN SCHEMA <schema> GRANT SELECT,UPDATE,INSERT,DELETE ON TABLES TO role_app_code_asset;
ALTER DEFAULT PRIVILEGES IN SCHEMA <schema> GRANT USAGE ON SEQUENCES TO role_app_code_asset;
ALTER DEFAULT PRIVILEGES IN SCHEMA <schema> GRANT EXECUTE ON FUNCTIONS TO role_app_code_asset;
ALTER DEFAULT PRIVILEGES IN SCHEMA <schema> GRANT USAGE ON TYPES TO role_app_code_asset;

RESET ROLE;

ALTER ROLE "{{name}}" SET search_path TO <schema>;

ALTER ROLE "{{name}}" SET ROLE "role_own_code_asset"; -- Permet de se connecter directement avec le rôle chapeau (qui sera donc propriétaire des objets que vous créerez)
END
$do$;

---------------------------------------------------------------
--creation of the role : app_code_asset

--in the directory : /data/<path>/dynamic_role/app

--script :  create_dyna_role_app_asset.sql
---------------------------------------------------------------

--   role APP
DO
$do$
BEGIN

-- création du role dynamique
CREATE ROLE "{{name}}" LOGIN PASSWORD '{{password}}' VALID UNTIL '{{expiration}}' INHERIT;
GRANT "{{name}}" TO admin;

-- rattachement du user app-ibmclouddb-schema1 au groupe role_app_12345_schema1 (qui a été créé en même temps que role_own_12345_schema1)
GRANT role_app_code_asset TO "{{name}}";
ALTER ROLE "{{name}}" SET search_path TO <schema>;
RESET ROLE;
END
$do$;

---------------------------------------------------------------
--drop of the role : own_code_asset

--in the directory : /data/<path>/dynamic_role/app

--script :  drop_dyna_role_own_asset.sql
---------------------------------------------------------------

revoke admin from "{{name}}" ;
grant "{{name}}" to admin ;
REASSIGN OWNED BY "{{name}}" to "role_own_code_asset";
DROP OWNED by "{{name}}" ;
DROP ROLE IF EXISTS "{{name}}";


-------------------------------------------------------------
--drop of the role : app_code_asset

--in the directory : /data/<path>/dynamic_role/app

--script :  drop_dyna_role_app_asset.sql
-------------------------------------------------------------

revoke admin from "{{name}}" ;
grant "{{name}}" to admin ;
REASSIGN OWNED BY "{{name}}" to "role_app_code_asset";
DROP OWNED by "{{name}}" ;
DROP ROLE IF EXISTS "{{name}}";




Les commentaires sont fermés.