Semblable à Cette question , j'aimerais savoir comment générer toutes les déclarations code> code> publiées à tous les rôles dans un ensemble de schémas et une liste de rôles dont les noms se terminent par "proxy". Je souhaite recréer des déclarations telles que: Le but est d'aider à migrer à partir d'une base de données de développement à une base de données de test (Oracle 11g). Il existe des outils qui tentent de le faire automatiquement, mais échouent souvent. P> Des idées? P> P>
4 Réponses :
Vous pouvez le faire avec un code PL / SQL:
TYPE obj_name_type is TABLE OF ALL_OBJECTS%OBJECT_NAME INDEX BY BINARY_INTEGER; object_names obj_name_type; i INTEGER; BEGIN SELECT object_name BULK COLLECT INTO object_names FROM ALL_OBJECTS WHERE OWNER = 'whatever' AND object_type = 'PROCEDURE'; FOR i IN 1 .. object_names.last LOOP EXECUTE IMMEDIATE 'GRANT EXECUTE ON ' object_names(i) ' TO ' role_name END LOOP; END;
Cela permettrait d'accorder des droits excactuels à toutes les procédures de votre propriétaire. Si j'ai bien compris la question, il s'agit d'obtenir des subventions réelles et de fournir un script pour les recréer sur un schéma différent.
Je montrais juste l'idée générale. Vous pouvez ajuster la requête SELECT pour obtenir la bonne liste.
Pourquoi ne pas utiliser pl / sql? Cela semble être un bon outil à cet effet.
Pl / SQL ajoute une couche supplémentaire de complexité qui n'est pas nécessaire - cela signifie également qu'il faut plus de temps pour utiliser dans le développeur PL / SQL.
Cela répond à nos besoins:
SELECT 'GRANT ' || p.privilege || ' ON ' || p.table_name || ' TO ' || p.grantee || ';' AS generated_grant FROM dba_tab_privs p WHERE p.grantor IN ( 'SCHEMA_NAME_01', 'SCHEMA_NAME_02' ) AND p.grantee IN ( SELECT DISTINCT granted_role FROM dba_role_privs WHERE grantee LIKE '%PROXY' AND granted_role NOT IN ('CONNECT','AQ_ADMINISTRATOR_ROLE','RESOURCE') ) AND p.table_name NOT LIKE 'BIN%' AND p.table_name NOT LIKE '%$%' ORDER BY p.table_name, p.grantee, p.privilege;
Hélas cela ne fonctionne pas. Il n'inclut pas le propriétaire de l'objet dans le script, qui compte lorsque nous manipulons plusieurs schémas. En outre, GRANDER CODE> est le compte qui a émis l'original
Grant ... code> déclaration non au schéma de possession.
Assez juste. Je voulais juste signaler des domaines potentiels qui pourraient causer des problèmes pour les futurs demandeurs qui viennent à ce sujet à travers un résultat de perquisition.
Ce script génère une liste de tous les privilèges de table accordés aux rôles ...
select dbms_metadata.get_granted_ddl('OBJECT_GRANT', 'A') from dual /
Je voulais résoudre un problème beaucoup comme celui-ci. La seule différence est que je voulais un outil plus générique, ainsi que le DBMS agnostique. Je voulais pouvoir appliquer l'outil dans les environnements de production et certaines des bases de données cible n'étaient pas oracle.
Qu'est-ce que j'ai proposé était une fonction PowerShell qui effectue une substitution de paramètres et génère un script répétitif contenant une séquence de déclarations de subventions. La sortie ressemble à p> Il existe deux entrées de mon outil, un fichier de modèle et un fichier CSV. Les regards de fichier de modèle comme celui-ci: p> Expand-csv demo.csv demo.tem > demo.sql
Je suppose que vous devez le faire la dure. Boucle via le "all_tab_privs" et générer ce script. Une question intéressante cependant. J'aimerais savoir si c'est possible.