Régénérer les Subventions pour les rôles à travers les schémas
Similaire à cette question, je voudrais savoir comment générer tous les GRANT
déclarations émises à tous les rôles dans une série de schémas et d'une liste de rôles dont les noms se terminent par "PROXY". Je veux recréer des déclarations comme:
GRANT SELECT ON TABLE_NAME TO ROLE_NAME;
GRANT EXECUTE ON PACKAGE_NAME TO ROLE_NAME;
Le but est d'aider à migrer à partir d'une base de données de développement d'un test de base de données (Oracle 11g). Il y a quelques outils qui tentent de le faire automatiquement, mais échouent souvent.
Des idées?
- Je suppose que vous avez à faire à la dure. Boucle à travers le "All_TAB_PRIVS" et de générer ce script. Une question intéressante cependant. Je voudrais savoir si c'est possible.
Vous devez vous connecter pour publier un commentaire.
Ce script génère une liste de tous les privilèges accordés à des rôles...
Noter que je n'ai pas restreindre le bénéficiaire de la subvention rôles, parce que votre question est vague sur ce point. Vous pouvez avoir besoin d'ajouter un filtre à la sub_query sur
dba_roles
. Si vous avez des rôles accordés à d'autres rôles que vous aurez envie de choisir ceux trop ...Pour obtenir votre liste de rôles ...
Noter que ces scripts ne génèrent pas de subventions pour les privilèges du système. Aussi, la vie est un peu plus compliqué si vous utilisez des objets de l'annuaire, parce que requiert un autre mot-clé...
modifier
Dans 9i Oracle a introduit le DBMS_METADATA paquet qui emballe beaucoup de ces sortes de requêtes PL/SQL simple API. Par exemple, cet appel sera prorduces CLOB avec tous l'objet de privilèges accordés à Un ...
C'est évidemment beaucoup plus simple que le roulement des nôtres.
Vous pouvez le faire avec un peu de code PL/SQL:
Vous pouvez le rendre plus générique pour cartographier les types d'autorisation pour les types d'objet ou quoi avez-vous mais c'est l'idée de base.
Vous devez utiliser
EXECUTE IMMEDIATE
parce que vous ne pouvez pas exécuter DDL de manière statique à l'intérieur du code de procédure.Cela répond à nos besoins:
grantor
est le compte qui a délivré l'originalgrant ...
déclaration qui n'est pas le propriétaire du schéma.Je voulais résoudre un problème beaucoup comme celui-ci. La seule différence est que je voulais un outil qui est plus générique, et aussi SGBD agnostique. Je voulais être en mesure d'appliquer l'outil dans les environnements de production, et certains des bases de données cibles n'étaient pas Oracle.
que je suis venu avec était une Powershell fonction qui effectue paramètre de substitution, et génère un répétitives script contenant une séquence d'instructions GRANT. La sortie ressemble à
Il y a deux entrées pour mon outil de, un modèle de fichier et un fichier csv. Le modèle de fichier ressemble à ceci:
Et le fichier csv ressemble à ceci:
L'expansion de l'outil ressemble à ceci:
Enfin, un exemple d'appel à l'outil ressemble à ceci:
noter que le fichier csv spec vient en premier, et le fichier de modèle de spec vient en second.
notez que la "forme" paramètres utilisés dans le modèle de fichier ressemble Powershell variables. C'est ce qu'ils sont.
notez que les noms utilisés dans le modèle correspondent aux noms qui apparaissent dans l'en-tête du fichier csv.
En fait, j'ai utilisé un précurseur de cet outil avec une variété de dialectes SQL, et également à la cible de langues autres que SQL. Je l'ai même utilisé pour générer un répétitives script Powershell qui ne fait rien de plus que d'appeler un autre .ps1 script, encore et encore, avec différents paramètres réels.
C'est pas le plus élégant de l'outil dans le monde, mais il me sert bien.