3.25.2008

Sécuriser les listeners sur les bds Oracle 8i,9i et 10g

Est-ce que vous savez qu'on peut arrêter le listener d'une bd oracle à partir d'un client Listener Control Utility (lsnrctl.exe) à distance? On peut le faire lorsque le listener n'est pas protégé par un mot de passe. Cela est d'autant plus critique en 8i et 9i puisqu'en 10g, il y a une authentification OS sur le serveur qui permet seulement l'exécution locale du programme. Le listener est un programme qui permet à la BD d'écouter sur certains ports pour savoir quelles commandes exécuter.

Ce document de 27 pages sur la sécurité des listeners pour Oracle vous montre l'ampleur des dégâts possibles lorsqu'on sait exploiter la brèche.

Voici comment mettre un mot de passe en 9i:

$ lsnrctl
LSNRCTL> change_password
Old password:
New password:
Reenter new password:
LSNRCTL> set password
Password:
LSNRCTL> save_config

* lsnrctl est un programme qu'on lance dans l'invite de commandes (cmd)

et pour 10g:

$ lsnrctl
LSNRCTL> change_password
Old password:
New password:
Reenter new password:
LSNRCTL> save_config


La seule différence entre 9 et 10 est qu'il faut s'authentifier avec le mot de passe choisi avant de sauvegarder la configuration. De plus, il existe un outil gratuit pouvant tester la sécurité de vos listeners Oracle.

Références:

3.24.2008

Redimensionner/resizer un tablespace temporaire pour oracle

Cette semaine, dans le cadre d'une opération de maintenance d'une BD de production, j'ai dû redimensionner le tablespace temporaire par défaut (default temporary tablespace). Il avait un datafile de 15go alors qu'un petit datafile de 1go auto fait très bien l'affaire. Ce tablespace s'est sans doute agrandi dû à une requête SQL mal construite retournant un flot de données énorme devant être trié.

Toutefois, comme ce tablespace est utilisé par tous les utilisateurs de la BD et qu'il est celui par défaut pour les opérations temporaires (telles un tri), j'ai procédé de la façon suivante:
- J'ai créé un 2e tablespace temporaire (TEMP2);
- J'ai assigné ce tablespace comme tablespace temporaire par défaut;
- J'ai attribué TEMP2 aux utilisateurs;
- J'ai effacé le tablespace TEMP et son datafile de 15go;
- J'ai recréé TEMP avec une taille de 100 mo auto extensible;
- J'ai attribué TEMP aux utilisateurs;
- J'ai effacé TEMP2

Voici ce que cela donne en script SQL. Il est à noté que j'ai roulé ce script hors des heures de production pour éviter les problèmes.


create temporary tablespace TEMP2
tempfile 'YOURPATH\TEMP02.dbf'
size 100M
autoextend on
next 100M maxsize 4096M
extent management local UNIFORM SIZE 5M;


ALTER DATABASE DEFAULT TEMPORARY TABLESPACE TEMP2;

-- On donne aux utilisateurs le tablespace temporaire TEMP2
set heading off
spool c:\travail\alter_user_temp.sql
select 'alter user ' || username || ' TEMPORARY TABLESPACE TEMP2;' from all_users order by username;
spool off
@c:\travail\alter_user_temp.sql

DROP TABLESPACE TEMP INCLUDING CONTENTS AND DATAFILES;


CREATE TEMPORARY TABLESPACE temp
TEMPFILE 'YOURPATH\TEMP01.dbf' SIZE 100M REUSE
AUTOEXTEND ON NEXT 100M MAXSIZE 8192M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;


ALTER DATABASE DEFAULT TEMPORARY TABLESPACE TEMP;

-- On redonne aux utilisateurs le tablespace temporaire TEMP
spool c:\travail\alter_user_temp.sql
select 'alter user ' || username || ' TEMPORARY TABLESPACE TEMP;' from all_users order by username;
spool off
@c:\travail\alter_user_temp.sql


DROP TABLESPACE TEMP2 INCLUDING CONTENTS AND DATAFILES;

Mes items partagés de Google Reader