web-dev-qa-db-fra.com

Sécurité des développeurs d'applications effectuant des travaux PL / SQL à Oracle

Comment gérez-vous le manque de privilèges de niveau de schéma à Oracle? L'architecture de sécurité d'Oracle fonctionne bien pour les applications qui nécessitent uniquement des privilèges de niveau d'objet et fonctionnent bien pour les DBA qui ont besoin de quelques restrictions. Cependant, il semble y avoir un grand trou béant dans l'architecture des programmeurs faisant le développement avec une application frontale et PL/SQL dans plusieurs schéma. Voici quelques-unes de mes options avec leurs inconvénients:

  1. Faire le développement de chaque programmeur dans leur propre schéma. Le DBA accordera des privilèges de niveau d'objet aux programmeurs les ayant besoin. Tout développement de paquet doit être effectué par un DBA. L'inconvénient majeur est que les programmeurs utiliseront la base de données comme un godet de bits au détriment des performances de la base de données. Je souhaite que les programmeurs se développent dans la base de données, mais cette méthode le découragerait grandement.

  2. Donnez à chaque programmeur le nom d'utilisateur/mot de passe de la dizaine ou un schéma dont ils ont besoin pour le développement. Accorder ces candidats à créer des procédures, des tableaux, etc. Certains des inconvénients avec cette approche sont que les programmeurs doivent conserver plusieurs connexions et sont rarement connecté comme eux-mêmes. Le développement de schéma cross est également difficile.

  3. Grant programmeurs Proxy Authentification Privilèges sur chaque schéma dont ils ont besoin pour le développement. Cela les garde connectés comme eux-mêmes sans avoir à leur donner des privilèges autres que le privilège de proxy. Les inconvénients incluent des programmeurs ayant à maintenir des connexions distinctes pour chaque schéma qu'ils procurent, le développement de schéma croisé est plus lourd car les connexions doivent être constamment modifiées et les emballages utilisant des liens de base de données publics avec une authentification transcédente ne compilent pas les connexions proxy.

  4. Donnez à chaque programmeur privilèges de DBA. - L'inconvénient est la sécurité. Aucun programmeur de schéma ne peut être tenu de tout schéma et tout programmeur peut imiter tout autre programmeur (DBA).

Il semble y avoir une option manquante pour accorder à chaque programmateur Select/Insérer/Créer/etc. Les privilèges sur le schéma doivent faire le développement. Ils se connectent comme eux-mêmes de faire leur travail en utilisant une connexion. De nouveaux objets dans le schéma qu'ils ont accès sont immédiatement disponibles.

Est-ce que je manque quelque chose? Comment gérez-vous les programmeurs d'applications qui font le développement PL/SQL?

13
Leigh Riffel

De retour dans les jours où j'ai travaillé dans une boutique Oracle, nous avons eu un serveur "DEV" (développement) spécifique, qui disposait de restrictions de sécurité différentes que le serveur "Production). Les développeurs pourraient faire tout ce dont ils avaient besoin, puis nous remetions les scripts nécessaires à la DBA à appliquer sur le serveur de production.

Dans le cas de nos systèmes critiques (Bannière SCT, de suivi des cours et des étudiants et des finances Oracle), il existait également des serveurs "tests" et "semences". Le test était destiné aux tests d'acceptation des utilisateurs avant la migration de Dev à prod; "Graine" était une installation de stock du logiciel, alors devrions-nous trouver un bogue, nous pourrions vérifier si c'était quelque chose que nous avions introduit ou provenant du logiciel SCT ou Oracle.

11
Joe

Utilisez des rôles pour associer des collections d'objets, puis accordez-vous à l'accès aux rôles

Le [~ # ~] subvention [~ # ~ ~] Déclaration permet au DBA de:

Privilèges d'objet pour un objet particulier aux utilisateurs, aux rôles et au public. Le tableau 18-2 répertorie les privilèges d'objet et les opérations qu'ils autoriennent.

Les privilèges d'objet peuvent être accordés à un rôle, il est relativement facile d'accorder un rôle d'accès à toutes les tables d'un schéma:

[.____] SQL> SPOOL privests.SQL 
 SQL> Sélectionnez 'Secender Select sur Scott.' || Table_Name || ' à jouer_sélectionne; ' de dba_tables où propriétaire = 'Scott'; 
 SQL> @ private.sql [.____] SQL> Subvention Role_Sélectionnez à John, Sam, Pierre; [.____]

Ceci, combiné à GRANT CREATE TABLE Évalué par l'utilisateur de schéma approprié au rôle signifie que les développeurs peuvent sélectionner et créer des tables. Ce n'est pas Parfait En tant que table créée, le script doit être exécuté à nouveau, mais WITH GRANT OPTION suggère que chaque développeur puisse alors accorder l'accès à la table qu'ils ont créée au rôle approprié.

this suggère de créer des déclencheurs de niveau DDL pouvant exécuter le processus d'octroi approprié, bien que des quantités importantes d'essais soient évidemment nécessaires, il devrait être possible de rendre l'énoncé de tableau de création accorder automatiquement aux autorisations appropriées pour approprier les rôles.

Éditer --

Selon [~ # ~] subvention [~ # ~ ~] , le CREATE TABLE Privilège:

Créez une table dans le schéma du bénéficiaire.

Ainsi, en leur donnant une table, alter table, etc. à partir de L'utilisateur correct, ils devraient pouvoir accéder à ce schéma de cet utilisateur comme s'il s'agissait de l'utilisateur approprié.

3