Sécurité Oracle 10g: Les rôles

Divers, Sécurité Oracle 4 Commentaires »

Les rôles
———

Il n’existe pas de notion de groupes d’utilisateur sous Oracle, mais la notion de rôle, qui permet de nommer un

groupe de privilèges. On peut affecter un rôle ? un ou n utilisateurs, voir ? un rôle.

Roles prédéfinis
—————-

Il existe un certain nombre de rôles prédéfinis, fournis avec Oracle 10g. Voici une liste de ces rôles avec les

privilèges système qu’ils offrent :
CONNECT :
Se connecter ! équivallent du privilède système ‘CREATE SESSION’

Attention !!! en version 10gR1 et antérieures, ce rôle donnait beaucoup + de privilèges, ? savoir :
ALTER SESSION, CREATE CLUSTER, CREATE DATABASE LINK, CREATE SEQUENCE,
CREATE SESSION, CREATE SYNONYM, CREATE TABLE, CREATE VIEW
RESOURCE :
créer des données avec des quotas sur tous les tablespaces ->
CREATE CLUSTER, CREATE INDEXTYPE, CREATE OPERATOR, CREATE PROCEDURE,
CREATE SEQUENCE, CREATE TABLE, CREATE TRIGGER, CREATE TYPE

DBA :
Tous les privilèges système avec ADMIN OPTION

EXP_FULL_DATABASE :
export complet ou incrémental ->
SELECT ANY TABLE, BACKUP ANY TABLE, EXECUTE ANY PROCEDURE, EXECUTE ANY TYPE, ADMINISTER RESOURCE MANAGER, and

INSERT, DELETE, and UPDATE on the tables SYS.INCVID, SYS.INCFIL, and SYS.INCEXP. Also the following roles:

EXECUTE_CATALOG_ROLE and SELECT_CATALOG_ROLE.

IMP_FULL_DATABASE :
import full + tous les privilèges système + role

DELETE_CATALOG_ROLE :
droit DELETE sur la table SYS.AUD$

EXECUTE_CATALOG_ROLE : privilège EXECUTE sur les objets du dictionnaire + HS_ADMIN_ROLE.

SELECT_CATALOG_ROLE : accès en consultation au dictionnaire + HS_ADMIN_ROLE.

RECOVERY_CATALOG_OWNER : privilèges pour le propriétaire du catalogue de restauration ->
CREATE SESSION, ALTER SESSION, CREATE SYNONYM, CREATE VIEW, CREATE DATABASE LINK,
CREATE TABLE, CREATE CLUSTER, CREATE SEQUENCE, CREATE TRIGGER, and CREATE PROCEDURE

HS_ADMIN_ROLE
protection des accès (SELECT et EXECUTE) au référentiel HS (Heterogeneous Services) data dictionary tables

(grants SELECT) and packages
AQ_ADMINISTRATOR_ROLE
privilèges d’administration de l’ Advance Queuing. Notamment : ENQUEUE ANY QUEUE, DEQUEUE ANY QUEUE, et MANAGE

ANY QUEUE + SELECT sur les tables AQ + EXECUTE sur les packages AQ.

roles applicatifs
—————–
Des roles définis pour les applicatifs, en fonction des besoins et ? minima !
Ainsi on peut créer un rôle qui donne des droits de consultation sur les tables d’un schéma :

– creation du role
SQL> create role consult_finance;
– affectation des privileges au role
SQL> grant select on budget to consult_finance;
SQL> grant select on fournisseur to consult_finance;
SQL> grant select on client to consult_finance;
– cession du role aux utilisateurs
SQL> grant consult_finance to user_finance_1;
SQL> grant consult_finance to user_finance_2;

Note : un user ne peut pas hériter de plus de ‘MAX_ENABLED_ROLES’ paramètre d’initialisation de la base, dont la valeur par défaut est 30 en 10g. CEla parait peu probable pour un applicatif classique (voire déraisonnable).
Dans le cas d’une console d’administration centrale (console 10g GRID ou server manager console). Le user d’administration cionnecté hérite de tous les droits qu’il crée…ce qui est beaucoup plus fréquent ! et la limite MAX_ENABLED_ROLES peut être facilement atteinte et … empêcher une connexion ? la console !
Informations sur les rôles dans le référentiel (dictionnaire) Oracle 10g
————————————————————————

DBA_ROLES
Tous les roles !
DBA_ROLE_PRIVS, USER_ROLE_PRIVS
roles données aux users et/ou aux roles
ROLE_ROLE_PRIVS
roles donnés aux roles
ROLE_SYS_PRIVS
privilèges systèmes donnés aux roles (accessible au user)
ROLE_TAB_PRIVS
privilèges objets donnés aux roles (accessible au user)
SESSION_PRIVS
privilèges de la session courante
SESSION_ROLES
roles de la session courante

Les roles et la console GRID 10g
———————————

La console donne par defaut le role CONNECT, cela ne pose pas de pb de sécurité sur une base 10g…mais si on s’en sert pour administrer une base 9i (avec l’agent qui va bien) le role CONNECT offre presque tous les privilèges de création/suppression de données dans le schéma.

solution erreur ORA-01925

Musée des erreurs pas de Commentaire »

ORA-01925: maximum of 148 enabled roles exceeded

Attention cet article concerne essentiellement Oracle 9i, le paramètre MAX_ENABLED_ROLES étant obsolète en 10g…

Lors du CREATE ROLE avec option par defaut, le role créé est affecté implicitement au createur qui peut donc le GRANTer grace a son admin option par defaut (et aussi si le role est ensuite revoqué ce qui est plus étonnant…)

remarque : si le role est role ‘ enterprise ‘ ou ‘ global role ‘ dans la terminologie Oracle, le role n’est pas granté au créateur

Dans le cas standard, cet héritage peut etre génant particulierement pour des comptes DBA (genre SYSTEM ou OEM_CONNECT, qui est l’utilisateur par défaut de la console OEM) consommateurs de ce genre de commandes.
Le MAX_ENABLED_ROLES etant une limite PAR USER, il peut etre facilement atteint.

Solution (résolution)

1) vérifier s’il n’y a pas de role superflus et le cas échéant les supprimer

2) dans un deuxieme temps seulement ! : augmenter le MAX_ENABLED_ROLES

remarque : la valeur maximum autorisée de MAX_ENABLED_ROLES est 148

Effet pervers : si la limite courante est atteinte par OEM_CONNECT on ne peut plus se connecter a la console d’administration OEM, par contre cf ce qui est dit + haut on peut eventuellement se connecter en Standalone, via un autre compte DBA…

Migration Oracle 9.2.0.5 en 9.2.0.6 + Patch UTL_FILE

Administration Oracle, Divers 2 Commentaires »

1] Préparation

Arret de toutes les bases
Arret listener (ex /bin/su – oracle « -c lsnrctl stop listener »)
Bien penser ? arréter l’agent 9i : agentctl stop
Pareil pour apache /oracle/9iDB/apache/apache/ ./apachectl stop
Et eventuellement le deuxième listener si y en a un!!!!
Back up eventuel

2] Migration du Software Oracle 9iDB 9.2.0.5 en 9.2.0.6

$ ORACLE_HOME=/oracle/9iDB
$ ORACLE_SID=DEVUN
$ export ORACLE_HOME ORACLE_SID

Aller dans le repertoire ou il y a le patch

cd Repertoire_patchset/Disk1
Lancer l’installer : ./runInstaller

A l’ecran de bienvenue, cliquer sur suivant.
Selectionner l’emplacement du products.xml qui est dans repertoire_patchset/Disk1/stage/products.xml
Verifier le oracle_home

A l’ecran de résumé cliquer sur install.
Selectionner le patch que vous souhaitez installer.
Quand on vous le demande, exécuter le script $ORACLE_HOME/root.sh sous root.
Cliquer exit pour sortit.

3] Passage du patch UTL_FILE

Dézipper le quelque part.
Pour l’appliquer :
dans le fichier : $ORACLE_HOME/inventory/ContentsXML/oraclehomeproperties.xml
changer le 610 par 212
cd /xxxxxxxxx/patches/4081980/
Mettre le bon PATH.
ex PATH=../OPatch:$PATH

Arret de toutes les bases
opatch apply

4] Redémarrage base une par une

1) Startup migrate

Prés requis : java_pool_size >= 150Mo
shared_pool_size >= 150Mo
100Mo d’espace libre dans le tablespace SYSTEM

sqlplus /nolog
SQL> connect / as sysdba
SQL> startup migrate
SQL> spool patch.log
SQL> @?/rdbms/admin/catpatch.sql
SQL> spool off

Remarque : il se peut que vous ayez une erreur lié au java a peu prés au milieu du script
le script continue et se termine correctement.

Restart the database:

SQL> shutdown immediate
SQL> startup
SQL> @?/rdbms/admin/utlrp.sql

2) Suite du pb utl_file

Ouverture des bases et sur chacune d’elles passer :
SQL>@?/rdbms/admin/utlfile.sql
SQL>@?/rdbms/admin/prvtfile.plb

3) Redémarrer le listener : lsnrctl start
et l’agent 9i, Apache etc……

Problèmes classiques sur les droits : 0RA-00942 , ORA-01031

Divers, Sécurité Oracle pas de Commentaire »

————————————————–
– une vue de BLAKE sur une table de SCOTT
————————————————–
connect scott
(scott a les droits sur la table)
create view vscott as select * from emp

connect blake
select * from scott.vscott
*
ERROR at line 1:
ORA-00942: table or view does not exist

connect scott
grant select on emp to blake

…le droit sur la table sert pour accéder …a la table
connect blake
select * from scott.vscott
*
ERROR at line 1:
ORA-00942: table or view does not exist

…Le droit sur la vue suffit
connect scott
grant select on vscott to blake

connect blake
select * from scott.vscott
–> OK

———————————————————
—KING accede a une vue de BLAKE sur une table de SCOTT
———————————————————
connect SYSTEM
grant select on scott.emp to blake;
create view blake.vblake as select * from scott.emp
connect SYSTEM
SQL> grant select on blake.vblake to king;
Autorisation de privilèges (GRANT) acceptée.
connect KING
select * from blake.vblake
*
ERROR at line 1:
ORA-01031: insufficient privileges

Si on avait tenté de donner les droits en tant que BLAKE
cela aurait été plus clair :
connect blake
grant select on blake.vblake to king
*
ERROR at line 1:
ORA-01720: grant option does not exist for ‘SCOTT.EMP’

LA SOLUTION
connect SCOTT (ou SYSTEM)
grant select on scott.emp to blake WITH GRANT OPTION

Droits sur les objets

Divers, Sécurité Oracle pas de Commentaire »

Pour des raisons de sécurité évidentes, un utilisateur autre que DBA n’a aucun droit a priori….même pas celui de se connecter ? la base de données !

Droits implicites

Par contre, le créateur d’un objet (TABLE, VUE , INDEX, etc.) est son propriétaire,et a implicitement des droits sur cet objet. Il possède tous les droits sur son contenu : consultation, mises ? jour, mais aussi suppression complète de sa structure (le contenant).

– exemple

– on suppose que l’utilisateur DD a reçu le droit de se connecter et de creer des tables…
SQL> connect DD/DD
SQL> create table essai (n integer);
Table created
– droit d’insertion (mais aussi suppression et modification) implicite
SQL> insert into essai values (1);
1 ligne créée.
SQL> commit;
Validation effectuée.
– a fortiori droit de consultation
SQL> select * from essai;
N
———-
1
– suppression de la table et de son contenu
SQL> drop table essai;
Table supprimée.Par contre un autre utilisateur (s’il n’est pas DBA) n’a a priori aucun droit sur les tables des autres:

– exemple

– on suppose que DD possede une table T1…
SQL> connect toto/toto
SQL> select * from dd.t1;
select * from dd.t1
*
ERREUR ? la ligne 1 :
ORA-00942: table or view does not exist

Droits explicites – GRANT et REVOKE

GRANT et REVOKE permettent respectivement de donner ou de supprimer les droits explicites d’accès en lecture ou

mise ? jour ? un utilisateur particulier, pour un objet particulier.
C’est en général le propriétaire de l’objet peut donner des droits d’accès ? un autrer utilisateur.

– exemples:

SQL> GRANT SELECT ON TAB_CLIENTS TO MARTIN
SQL> GRANT UPDATE, INSERT ON TAB_CLIENTS TO DUPONTpar défaut un DBA ne peut pas donner des droits d’accès ? un objet qui ne lui appartient pas. Le propriétaire doit lui céder les drois avec un grant option (!?) :

SQL> connect system/xxxx
Connected.
SQL> grant select on intranet.annuaire to scott;
ERROR at line 1: ORA-01031: insufficient privilegesLe type de privilège dépend évidemment de l’objet sur lequel il s’applique. Ceci est résumé ici :

SELECT (uniquement !) -> les séquences

SELECT, INSERT, UPDATE, DELETE -> les tables, les vues, les vues matérialisées

REFERENCE (possibilité de créer une clé étrangère sur la table) -> les tables et les vues

EXECUTE -> les procédures

INDEX, ON COMMIT REFRESH, QUERY REWRITE -> les tables

Il est possible de donner un privilège avec le droit de transférer ce privilège ? d’autres (? utiliser avec parcimonie). Ceci se fait avec l’otion ‘GRANT’ du GRANT (!) :GRANT SELECT ON TAB_CLIENTS TO DUPONT WITH GRANT OPTION
(on suppose que TAB_CLIENTS est un synonyme public visible par tout le monde). Dupont, même s’il n’est pas propriétaire pourra alors ? son tour faire :
GRANT SELECT ON TAB_CLIENTS TO MARTIN

une erreur très répandue consiste ? référencer un objet (dont on n’est pas proprétaire et sur lequel il n’y pas de synonyme) par son nom, SANS le préfixer par le nom du propriétaire. exemple : SELECT * from EMP au lieu de

SELECT * FROM SCOTT.EMP
ceci donne une erreur d’accès du type

ERROR at line 1:
ORA-00942: table or view does not exist (?!)

même si on a les droits de lecture…