-- ============================================================================ -- Deynao - Compte de supervision dedie (creation + droits lecture seule) -- ============================================================================ -- Ce script CREE le compte (s'il n'existe pas) puis lui accorde CREATE SESSION -- + SELECT en LECTURE SEULE sur les vues systeme. Aucun droit d'ecriture, aucun -- role DBA, aucun acces aux donnees applicatives. Generique (aucun nom/IP en dur). -- Compatible Oracle 11g / 12c / 19c / 21c. -- -- COMMENT LANCER : se connecter en SYS, puis executer ce fichier. Le script demande -- le nom du compte de supervision + un mot de passe (masque), cree le compte si besoin -- et accorde les droits. Re-executable sans risque. -- - Windows : "Invite de commandes" sur le serveur Oracle, puis -- sqlplus / as sysdba @C:\chemin\deynao_grant_privileges_template.sql -- - Linux : shell (utilisateur oracle) sur le serveur, puis -- sqlplus / as sysdba @/chemin/deynao_grant_privileges_template.sql -- - A distance (client Oracle installe) : -- sqlplus sys/@:/ as sysdba @ -- - Outil graphique (SQL Developer, Toad...) : ouvrir le fichier, l'executer en SCRIPT (F5). -- Puis, dans Deynao : creez une connexion avec ce compte pour superviser la base. -- -- POURQUOI SYS (et pas SYSTEM) : les vues V$ appartiennent a SYS ; SYSTEM ne peut -- pas accorder de droits dessus (ORA-01031). -- -- MULTITENANT (12c+) : pour un PDB, connectez-vous au PDB cible (compte LOCAL). -- Au niveau CDB$ROOT, nommez le compte avec le prefixe C## (sinon ORA-65096). -- ============================================================================ SET FEEDBACK OFF SET VERIFY OFF SET LINESIZE 120 SET PAGESIZE 100 SET SERVEROUTPUT ON WHENEVER SQLERROR CONTINUE WHENEVER OSERROR CONTINUE PROMPT ============================================================================ PROMPT Deynao - Configuration du compte de supervision (lecture seule) PROMPT ============================================================================ PROMPT -- Astuce parc : gardez le MEME nom sur toutes vos bases (ex. DEYNAO_MON) pour -- reconnaitre le compte de supervision partout. Le compte est LOCAL a chaque base. ACCEPT oracle_user CHAR PROMPT 'Nom du compte de supervision Deynao (ex. DEYNAO_MON) : ' -- Mot de passe : saisie MASQUEE, jamais echoee ni spoolee (bloc en SET ECHO OFF). -- Ignore si le compte existe deja. Evitez les guillemets doubles dans le mot de passe. SET ECHO OFF ACCEPT oracle_pwd CHAR PROMPT 'Mot de passe pour ce compte (masque): ' HIDE -- Creation du compte SI absent (sinon ignoree, sans erreur). En cas d'echec -- (politique de mot de passe, prefixe C## requis en CDB$ROOT...), un message -- clair s'affiche, puis l'erreur stoppe la creation : les GRANT suivants ne -- s'appliqueront pas a un compte inexistant (erreurs visibles, sans ambiguite). DECLARE v_exists NUMBER; BEGIN SELECT COUNT(*) INTO v_exists FROM dba_users WHERE username = UPPER('&oracle_user'); IF v_exists = 0 THEN EXECUTE IMMEDIATE 'CREATE USER "' || UPPER('&oracle_user') || '" IDENTIFIED BY "&oracle_pwd"'; DBMS_OUTPUT.PUT_LINE('Compte ' || UPPER('&oracle_user') || ' cree.'); ELSE DBMS_OUTPUT.PUT_LINE('Compte ' || UPPER('&oracle_user') || ' deja existant : creation ignoree.'); END IF; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('ECHEC creation du compte: ' || SQLERRM); DBMS_OUTPUT.PUT_LINE('Pistes: politique de mot de passe (profil), ou prefixe C## requis en CDB$ROOT.'); RAISE; END; / -- Le mot de passe ne doit plus subsister en memoire de la session SQL*Plus. UNDEFINE oracle_pwd SET ECHO OFF PROMPT Attribution des privileges de lecture (les erreurs eventuelles s'affichent ci-dessous)... -- ============================================================================ -- [OBLIGATOIRE] Connexion (sans CREATE SESSION, le compte ne peut pas se connecter) -- ============================================================================ GRANT CREATE SESSION TO &oracle_user; -- ============================================================================ -- [CRITIQUE] Vues requises pour les fonctionnalites de base -- ============================================================================ -- Vue d'ensemble + Status GRANT SELECT ON v_$instance TO &oracle_user; GRANT SELECT ON v_$database TO &oracle_user; GRANT SELECT ON v_$version TO &oracle_user; -- Performance GRANT SELECT ON v_$sga TO &oracle_user; GRANT SELECT ON v_$sgainfo TO &oracle_user; GRANT SELECT ON v_$sgastat TO &oracle_user; GRANT SELECT ON v_$pgastat TO &oracle_user; GRANT SELECT ON v_$system_event TO &oracle_user; GRANT SELECT ON v_$sysstat TO &oracle_user; GRANT SELECT ON v_$sysmetric TO &oracle_user; GRANT SELECT ON v_$sys_time_model TO &oracle_user; GRANT SELECT ON v_$system_wait_class TO &oracle_user; GRANT SELECT ON v_$segment_statistics TO &oracle_user; GRANT SELECT ON v_$buffer_pool_statistics TO &oracle_user; -- Capacite GRANT SELECT ON dba_tablespaces TO &oracle_user; GRANT SELECT ON dba_data_files TO &oracle_user; GRANT SELECT ON dba_temp_files TO &oracle_user; GRANT SELECT ON dba_free_space TO &oracle_user; GRANT SELECT ON dba_segments TO &oracle_user; GRANT SELECT ON v_$temp_space_header TO &oracle_user; -- Processus et Sessions GRANT SELECT ON v_$session TO &oracle_user; GRANT SELECT ON v_$process TO &oracle_user; GRANT SELECT ON v_$sesstat TO &oracle_user; GRANT SELECT ON v_$statname TO &oracle_user; GRANT SELECT ON v_$asm_disk TO &oracle_user; -- Verrous et Attentes GRANT SELECT ON v_$lock TO &oracle_user; GRANT SELECT ON v_$session_wait TO &oracle_user; GRANT SELECT ON v_$locked_object TO &oracle_user; -- Objets GRANT SELECT ON dba_objects TO &oracle_user; GRANT SELECT ON dba_tables TO &oracle_user; GRANT SELECT ON dba_indexes TO &oracle_user; GRANT SELECT ON dba_views TO &oracle_user; GRANT SELECT ON dba_synonyms TO &oracle_user; GRANT SELECT ON dba_source TO &oracle_user; -- Alertes Oracle (alert.log) GRANT SELECT ON v_$diag_alert_ext TO &oracle_user; GRANT SELECT ON v_$diag_info TO &oracle_user; -- Securite et Audit GRANT SELECT ON dba_users TO &oracle_user; GRANT SELECT ON dba_profiles TO &oracle_user; GRANT SELECT ON dba_roles TO &oracle_user; GRANT SELECT ON dba_role_privs TO &oracle_user; GRANT SELECT ON dba_users_with_defpwd TO &oracle_user; GRANT SELECT ON v_$pwfile_users TO &oracle_user; -- ============================================================================ -- [IMPORTANT] Fortement recommandes -- ============================================================================ -- Journalisation et Archivelog GRANT SELECT ON v_$log TO &oracle_user; GRANT SELECT ON v_$logfile TO &oracle_user; GRANT SELECT ON v_$log_history TO &oracle_user; GRANT SELECT ON v_$archived_log TO &oracle_user; GRANT SELECT ON v_$archive_dest TO &oracle_user; GRANT SELECT ON v_$archive_dest_status TO &oracle_user; -- Fichiers Oracle GRANT SELECT ON v_$controlfile TO &oracle_user; GRANT SELECT ON v_$datafile TO &oracle_user; GRANT SELECT ON v_$recover_file TO &oracle_user; -- UNDO et Rollback GRANT SELECT ON dba_undo_extents TO &oracle_user; GRANT SELECT ON v_$undostat TO &oracle_user; -- Parametres Oracle GRANT SELECT ON v_$parameter TO &oracle_user; -- ============================================================================ -- [OPTIONNEL] Fonctionnalites avancees -- ============================================================================ -- Sauvegardes RMAN et strategie de recovery GRANT SELECT ON v_$rman_backup_job_details TO &oracle_user; GRANT SELECT ON v_$rman_configuration TO &oracle_user; GRANT SELECT ON v_$rman_output TO &oracle_user; GRANT SELECT ON v_$backup_set TO &oracle_user; GRANT SELECT ON v_$backup_piece TO &oracle_user; GRANT SELECT ON v_$backup_redolog TO &oracle_user; GRANT SELECT ON v_$recovery_file_dest TO &oracle_user; GRANT SELECT ON v_$recovery_area_usage TO &oracle_user; GRANT SELECT ON v_$flash_recovery_area_usage TO &oracle_user; GRANT SELECT ON v_$dataguard_config TO &oracle_user; -- Jobs planifies (DBMS_SCHEDULER) GRANT SELECT ON dba_scheduler_jobs TO &oracle_user; GRANT SELECT ON dba_scheduler_job_run_details TO &oracle_user; GRANT SELECT ON dba_scheduler_programs TO &oracle_user; -- Securite avancee (audit complet) -- (unified_audit_trail = 12c+ ; dba_audit_trail = audit classique ; une vue -- absente sur votre version genere une erreur sans impact sur le reste) GRANT SELECT ON dba_sys_privs TO &oracle_user; GRANT SELECT ON dba_tab_privs TO &oracle_user; GRANT SELECT ON dba_stmt_audit_opts TO &oracle_user; GRANT SELECT ON dba_audit_trail TO &oracle_user; GRANT SELECT ON unified_audit_trail TO &oracle_user; -- Performance avancee GRANT SELECT ON v_$sql TO &oracle_user; -- Licences (indice de vigilance : detection technique des options/packs, LECTURE -- SEULE. DBA_FEATURE_USAGE_STATISTICS sert a AUDITER l'usage des fonctionnalites -- (recommande par Oracle) ; aucune vue AWR/Diagnostic Pack ici.) GRANT SELECT ON v_$option TO &oracle_user; GRANT SELECT ON v_$license TO &oracle_user; GRANT SELECT ON v_$osstat TO &oracle_user; GRANT SELECT ON dba_registry TO &oracle_user; GRANT SELECT ON dba_feature_usage_statistics TO &oracle_user; -- ============================================================================ -- [DASHBOARDS] Vues detaillees complementaires (par domaine) -- Requises par les vues DETAILLEES des dashboards (helpers/services internes). -- Toutes standard, LECTURE SEULE, AUCUNE vue AWR / Diagnostic Pack. -- ============================================================================ -- Performance (details memoire / PGA / latches / bibliotheque / I-O / long ops) GRANT SELECT ON v_$sga_dynamic_components TO &oracle_user; GRANT SELECT ON v_$pga_target_advice TO &oracle_user; GRANT SELECT ON v_$sql_workarea_histogram TO &oracle_user; GRANT SELECT ON v_$latch TO &oracle_user; GRANT SELECT ON v_$librarycache TO &oracle_user; GRANT SELECT ON v_$session_longops TO &oracle_user; GRANT SELECT ON v_$filestat TO &oracle_user; GRANT SELECT ON v_$iostat_file TO &oracle_user; -- Capacite (quotas / limites de ressources) GRANT SELECT ON dba_tablespace_usage_metrics TO &oracle_user; GRANT SELECT ON dba_ts_quotas TO &oracle_user; GRANT SELECT ON v_$resource_limit TO &oracle_user; -- Objets (contraintes / colonnes / triggers / erreurs de compilation) GRANT SELECT ON dba_constraints TO &oracle_user; GRANT SELECT ON dba_cons_columns TO &oracle_user; GRANT SELECT ON dba_tab_columns TO &oracle_user; GRANT SELECT ON dba_triggers TO &oracle_user; GRANT SELECT ON dba_errors TO &oracle_user; -- Verrous et Attentes (enqueues / transactions / 2-phase-commit en attente) GRANT SELECT ON v_$enqueue_stat TO &oracle_user; GRANT SELECT ON v_$transaction TO &oracle_user; GRANT SELECT ON dba_2pc_pending TO &oracle_user; -- Journalisation et Fichiers (threads redo / corruption blocs / traces / listener) GRANT SELECT ON v_$thread TO &oracle_user; GRANT SELECT ON v_$database_block_corruption TO &oracle_user; GRANT SELECT ON v_$diag_trace_file TO &oracle_user; GRANT SELECT ON v_$listener_network TO &oracle_user; -- Sessions et Multitenant (services / PDB 12c+) GRANT SELECT ON v_$services TO &oracle_user; GRANT SELECT ON v_$pdbs TO &oracle_user; -- Securite et Alertes serveur (sessions d'audit / alertes serveur) GRANT SELECT ON dba_audit_session TO &oracle_user; GRANT SELECT ON dba_outstanding_alerts TO &oracle_user; -- Jobs et DataPump (autotask / jobs et sessions DataPump / repertoires) GRANT SELECT ON dba_autotask_client TO &oracle_user; GRANT SELECT ON dba_datapump_jobs TO &oracle_user; GRANT SELECT ON dba_datapump_sessions TO &oracle_user; GRANT SELECT ON dba_directories TO &oracle_user; -- ============================================================================ -- ALTERNATIVE (pre-prod / labo) : a la place des grants individuels ci-dessus, -- GRANT SELECT_CATALOG_ROLE + SELECT ANY DICTIONARY couvrent toutes les vues. -- Deconseille en PRODUCTION (donne acces a tout le dictionnaire). -- GRANT SELECT_CATALOG_ROLE TO &oracle_user; -- GRANT SELECT ANY DICTIONARY TO &oracle_user; -- ============================================================================ PROMPT PROMPT ============================================================================ PROMPT Recapitulatif PROMPT ============================================================================ SET HEADING OFF SET FEEDBACK OFF SELECT CASE WHEN COUNT(*) > 0 THEN 'CREATE SESSION : OK' ELSE 'CREATE SESSION : ABSENT' END FROM dba_sys_privs WHERE grantee = UPPER('&oracle_user') AND privilege = 'CREATE SESSION'; SELECT 'Vues en lecture accordees : ' || COUNT(*) FROM dba_tab_privs WHERE grantee = UPPER('&oracle_user') AND privilege = 'SELECT'; SET HEADING ON PROMPT PROMPT Termine - compte &oracle_user pret pour la supervision Deynao. PROMPT Une erreur ORA-xxxxx ci-dessus = vue absente sur cette version d'Oracle PROMPT (sans impact sur les autres droits). PROMPT ============================================================================ SET VERIFY ON EXIT;