jeudi 30 avril 2009

Extraire et émettre les mêmes droits (permissions) Java

Voici une petite requête fort simple mais qui m'a sauvé du temps. Je devais émettre les mêmes droits d'un schéma sur une autre base de données. Les droits en questions étaient ceux liés aux permissions Java :

select 'EXEC dbms_java.grant_permission('''DJP.GRANTEE''', '''DJP.TYPE_SCHEMA':'DJP.TYPE_NAME''', '''DJP.NAME''', '''DJP.ACTION''');' from DBA_JAVA_POLICY DJP
/

Pour comparer les résultats entre les 2 bases de données, j'ai ajouté cette clause :

where not exists
( select 'x'
from DBA_JAVA_POLICY@DBLINK DJP2
where 'EXEC dbms_java.grant_permission('''DJP2.GRANTEE''', '''
DJP2.TYPE_SCHEMA':'DJP2.TYPE_NAME''', '''DJP2.NAME''', '''DJP.ACTION''')'=
'EXEC dbms_java.grant_permission('''DJP.GRANTEE''', '''
DJP.TYPE_SCHEMA':'DJP.TYPE_NAME''', '''DJP.NAME''', '''DJP.ACTION''')'
)
/

Je n'ai pas vérifié mais il existe peut-être une façon d'extraire ces droits avec le package DBMS_METADATA. C'est à voir !

mardi 21 avril 2009

Autentification sous Windows avec SYS

Ça faisait un bon bout de temps que je n'avais pas créé une base de données sous un environnement Windows.

Après en avoir créée une avec l'assistant DBCA, j'ai ouvert une fenêtre de lignes de commandes pour démarrer une session Oracle sous le compte SYS. Tout d'abord, j'ai débuté par initialisé mes variables d'environnement ORACLE_SID, ORACLE_HOME et j'ai ajouté le répertoire BIN au PATH.

Évidemment, je me suis frappé au même foutu problème que j'avais déjà rencontré auparavant :

E:\Oracle\oradb111>sqlplus / as sysdba
SQL*Plus: Release 11.1.0.6.0 - Production on Mar. Avr. 21 21:14:21 2009
Copyright (c) 1982, 2007, Oracle. All rights reserved.

ERROR:ORA-01031: privilÞges insuffisants

À ce moment, je me suis gratté la tête et je me suis dit: "Qu'est-ce qui faut que je fasse pour que ça fonctionne ?"

Je me souvenais qu'il y avait un paramètre à configurer dans le fichier "SQLNET.ORA" mais lequel ? Alors, pour me rafraichir la mémoire, j'ai "googolisé" avec des mots clés. Je suis alors tombé sur ce qui me manquait.

Il suffit de mettre la ligne suivante dans le fichier SQLNET.ORA pour être en mesure de s'authentifier avec le compte SYS sans mot de passe :

SQLNET.AUTHENTICATION_SERVICES=(NTS)

De plus, votre compte Windows doit être membre du groupe "ORA_DBA" autrement, vous ne pourrez pas établir une connexion.

La prochaine fois, j'aurais mon blog pour me le rappeler !