web-dev-qa-db-fra.com

Comment fonctionne le privilège SELECT ANY TABLE dans Oracle?

Je voudrais savoir comment le privilège SELECT ANY TABLE fonctionne en interne dans Oracle.

Est-il traité comme un privilège unique? Ou est-ce équivalent à faire un GRANT SELECT ON MyTable TO MyUser pour chaque table?

A titre d'exemple, je voudrais savoir si ce travail:

GRANT SELECT ANY TABLE TO PUBLIC;
REVOKE ALL ON MY_TABLE FROM PUBLIC;

Aurais-je encore accès à MY_TABLE de n'importe quel utilisateur après ces requêtes?

2
LostReality

Oui, tous les utilisateurs pourront toujours interroger MY_TABLE.

Vous regardez différents types de privilèges :

Les principaux types de privilèges utilisateur sont les suivants:

  • Privilèges système - Un privilège système donne à un utilisateur la possibilité d'effectuer une action particulière ou d'exécuter une action sur tout objet de schéma d'un type particulier. Par exemple, le privilège système CREATE TABLE permet à un utilisateur de créer des tables dans le schéma associé à cet utilisateur, et le privilège système CREATE USER permet à un utilisateur de créer des utilisateurs de base de données.
  • Privilèges d'objet - Un privilège d'objet donne à un utilisateur la possibilité d'effectuer une action particulière sur un objet de schéma spécifique. Différents privilèges d'objet sont disponibles pour différents types d'objets de schéma. Le privilège de sélectionner des lignes de la table EMPLOYEES ou de supprimer des lignes de la table DEPARTMENTS sont des exemples de privilèges d'objet.

SELECT ANY TABLE est un privilège système qui permet au bénéficiaire de:

Recherchez des tables, des vues ou des vues matérialisées dans n'importe quel schéma à l'exception de SYS. Obtenez des verrous de ligne à l'aide d'un SELECT ... FOR UPDATE.

Lorsque vous accordez qu'il s'agit d'un privilège unique autonome, visible dans dba_sys_privs. Lorsqu'Oracle décide si l'utilisateur est autorisé à accéder à une table, il peut d'abord examiner les privilèges du système, puis ne recherche que les privilèges d'objet spécifiques (visibles dans dba_tab_privs) s'il n'y a pas de privilège système qui autorise l'action en cours.

Les privilèges système ne sont pas traduits en privilèges individuels sur chaque objet de la base de données - ce qui serait horrible, car la création d'un nouvel objet devrait automatiquement déterminer à qui devraient être accordés des privilèges sur celui-ci en fonction du privilège système; et cela signifierait que vous ne pourriez pas faire la différence entre cela et les privilèges accordés individuellement. Ainsi, par exemple, si vous avez explicitement accordé des privilèges de sélection sur une table spécifique, l'utilisateur a reçu SELECT ANY TABLE, puis ils avaient SELECT ANY TABLE révoqué - qu'advient-il de la subvention explicite précédente?

Votre scénario est fondamentalement le même, sauf que vous avez spécifié tous les privilèges sur l'objet à révoquer. Si ce sont les deux seules commandes impliquées, PUBLIC n'a pas de privilèges explicites sur MY_TABLE donc la révocation ne fait rien; mais si des privilèges explicites sur cette table avaient été accordés, ils seraient révoqués. Cela n'a aucun impact sur le niveau supérieur SELECT ANY TABLE privilège système cependant.

Les privilèges sont cumulatifs; la révocation d'un privilège sur un objet spécifique ne permet pas de bloquer d'accéder à cet objet, il supprime simplement une route d'accès possible.

Soit dit en passant, j'espère que vous avez utilisé un exemple artificiel, car de tels privilèges système puissants devraient être accordés avec parcimonie et niquement lorsque cela est vraiment nécessaire . Laisser n'importe quel utilisateur interroger n'importe quelle table de votre base de données fait potentiellement un gros trou dans le modèle de sécurité. Encore une fois à partir des documents :

Oracle recommande de n'accorder les privilèges ANY qu'aux utilisateurs approuvés

et

Oracle recommande de ne pas accorder de privilèges système à PUBLIC.

et lisez plus dans le guide de sécurité de la base de données .

3
Alex Poole