Plsql webdba utl pkg
| 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
- Plsql random numbers — autre exemple de package PL/SQL utilitaire
- Drop db link — DDL dynamique appliqué aux database links