2010-03-04 7 views

Répondre

5

Impossible à faire. Dans Oracle, les privilèges sont accordés sur des objets spécifiques, à moins que vous n'ayez les privilèges ANY highpowered, qui accordent l'accès à n'importe quel objet dans n'importe quel schéma.

Ceci est une de ces choses qui semble assez ennuyeux mais qui est en fait assez sonore. Il n'y a pas de bonne raison d'accorder des privilèges à tous sur les objets d'un schéma en masse. Soit

  1. le second schéma vraiment besoins juste un sous-ensemble de privilges sur un sous-ensemble d'objets; ou
  2. le second schéma est totalement inutile.

Maintenant, il se peut que le sous-ensemble dans la première instance soit un très grand sous-ensemble. Mais la paresse n'est pas une excuse pour de mauvaises pratiques de sécurité.

Ce que nous pouvons faire est de générer les déclarations de subvention du dictionnaire de données:

select 'grant select on '||table_name||' to B' 
from user_tables 
/

(pour un script à exécuter par l'utilisateur A). Cela vaut encore mieux que d'accorder des privilèges sur le schéma, car cela signifie qu'au moins tout nouvel objet ajouté par l'utilisateur A ne sera pas automatiquement propagé à B sans une action supplémentaire et, par conséquent, sans autre réflexion sur la question de savoir s'il est approprié.

+0

Si l'on doit, une fois, créer un déclencheur DDL qui accorde automatiquement les privilèges appropriés à un rôle. Cela pourrait fournir des subventions de type schéma, qui ne sont pas rares dans d'autres SGBD. –

2

Vous pouvez utiliser un PROXY user. Ce n'est pas tout à fait la même chose car cela permet à un utilisateur de base de données de se connecter comme un autre mais en utilisant son propre mot de passe. Vous pouvez donc avoir plusieurs utilisateurs, chacun avec son propre mot de passe, en utilisant le même schéma.

Un exemple du code est here.

Questions connexes