Plsql webdba utl pkg

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Type Package PL/SQL
Objet Administration des comptes via SQL dynamique
Voir aussi Plsql random numbers

Plsql webdba utl pkg est un package PL/SQL d'exemple regroupant des opérations d'administration de comptes (création, suppression, changement de mot de passe, octroi/révocation de privilège) exécutées en SQL dynamique via DBMS_SQL. Ce package illustre la technique utilisée avant Oracle 8i pour exécuter du DDL depuis PL/SQL, à une époque où le SQL dynamique natif (EXECUTE IMMEDIATE) n'existait pas encore.

⚠️ Legacy : depuis Oracle 8i, la même chose s'écrit beaucoup plus simplement avec EXECUTE IMMEDIATE (SQL dynamique natif), sans ouverture/fermeture explicite de curseur DBMS_SQL. L'appel DBMS_SQL.PARSE(..., DBMS_SQL.V7) de la source utilise en outre un mode de compatibilité (V7) obsolète depuis longtemps, retiré ici sans remplacement (le paramètre n'est plus nécessaire).

⚠️ Injection SQL : les procédures ci-dessous concatènent directement les paramètres (username_in, password_in...) dans la commande DDL. Utilisables en l'état uniquement si les paramètres proviennent d'une source de confiance (script d'administration interne) — jamais avec une valeur saisie par un utilisateur final sans validation stricte au préalable (identifiant Oracle valide, caractères autorisés).

Script

Version modernisée (EXECUTE IMMEDIATE plutôt que DBMS_SQL) :

CREATE OR REPLACE PACKAGE webdba_util AS

  PROCEDURE drop_user(username_in IN VARCHAR2);

  PROCEDURE create_user(username_in             IN VARCHAR2,
                         default_tablespace_in   IN VARCHAR2,
                         temporary_tablespace_in IN VARCHAR2,
                         password_in             IN VARCHAR2);

  PROCEDURE change_user_password(username_in IN VARCHAR2,
                                  password_in IN VARCHAR2);

  PROCEDURE grant_user(username_in  IN VARCHAR2,
                        privilege_in IN VARCHAR2);

  PROCEDURE revoke_user(username_in  IN VARCHAR2,
                         privilege_in IN VARCHAR2);

END webdba_util;
/
SHOW ERRORS

CREATE OR REPLACE PACKAGE BODY webdba_util AS

  PROCEDURE drop_user(username_in IN VARCHAR2) IS
  BEGIN
    EXECUTE IMMEDIATE 'DROP USER ' || username_in || ' CASCADE';
  END drop_user;

  PROCEDURE create_user(username_in             IN VARCHAR2,
                         default_tablespace_in   IN VARCHAR2,
                         temporary_tablespace_in IN VARCHAR2,
                         password_in             IN VARCHAR2) IS
  BEGIN
    EXECUTE IMMEDIATE
         'CREATE USER ' || username_in
      || ' DEFAULT TABLESPACE ' || default_tablespace_in
      || ' TEMPORARY TABLESPACE ' || temporary_tablespace_in
      || ' IDENTIFIED BY ' || password_in;
  END create_user;

  PROCEDURE change_user_password(username_in IN VARCHAR2,
                                  password_in IN VARCHAR2) IS
  BEGIN
    EXECUTE IMMEDIATE 'ALTER USER ' || username_in || ' IDENTIFIED BY ' || password_in;
  END change_user_password;

  PROCEDURE grant_user(username_in  IN VARCHAR2,
                        privilege_in IN VARCHAR2) IS
  BEGIN
    EXECUTE IMMEDIATE 'GRANT ' || privilege_in || ' TO ' || username_in;
  END grant_user;

  PROCEDURE revoke_user(username_in  IN VARCHAR2,
                         privilege_in IN VARCHAR2) IS
  BEGIN
    EXECUTE IMMEDIATE 'REVOKE ' || privilege_in || ' FROM ' || username_in;
  END revoke_user;

END webdba_util;
/
SHOW ERRORS

Voir aussi