Privilèges sur les tables et les vues

Les privilèges sur les tables et les vues impliquent des actions sur les tables ou les vues d'une base de données.

Un utilisateur doit disposer des droits CONNECT sur la base de données pour pouvoir utiliser l'un des privilèges suivants:
  • CONTROL fournit à l'utilisateur tous les privilèges d'une table ou d'une vue, y compris la possibilité de la supprimer, et d'accorder et de révoquer des privilèges de table individuels. Vous devez disposer du droit ACCESSCTRL ou SECADM pour accorder le droit CONTROL. Le créateur d'une table reçoit automatiquement le privilège CONTROL sur la table. Le créateur d'une vue reçoit automatiquement le privilège CONTROL uniquement s'il dispose du privilège CONTROL sur toutes les tables, vues et pseudonymes référencés dans la définition de la vue.
  • ALTER permet à l'utilisateur de modifier une table, par exemple, pour ajouter des colonnes ou une contrainte d'unicité à la table. Un utilisateur disposant du privilège ALTER peut également utiliser la commande COMMENT sur une table ou sur les colonnes de la table. Pour plus d'informations sur les modifications possibles pouvant être apportées à une table, voir les instructions ALTER TABLE et COMMENT.
  • DELETE permet à l'utilisateur de supprimer des lignes d'une table ou d'une vue.
  • INDEX permet à l'utilisateur de créer un index sur une table. Les créateurs d'index disposent automatiquement du privilège CONTROL sur l'index.
  • INSERT permet à l'utilisateur d'insérer une ligne dans une table ou une vue et d'exécuter l'utilitaire IMPORT .
  • REFERENCES permet à l'utilisateur de créer et de supprimer une clé externe, en spécifiant la table comme parent dans une relation. L'utilisateur peut disposer de ce privilège uniquement sur des colonnes spécifiques.
  • SELECT permet à l'utilisateur d'extraire des lignes d'une table ou d'une vue, de créer une vue sur une table et d'exécuter l'utilitaire EXPORT .
  • UPDATE permet à l'utilisateur de modifier une entrée dans une table, une vue ou pour une ou plusieurs colonnes spécifiques d'une table ou d'une vue. L'utilisateur ne peut disposer de ce privilège que sur des colonnes spécifiques.

Le privilège d'octroi de ces privilèges à d'autres utilisateurs peut également être octroyé à l'aide de l'option WITH GRANT OPTION dans l'instruction GRANT.

Remarque: Lorsque le privilège CONTROL est octroyé à un utilisateur ou à un groupe sur une table, tous les autres privilèges de cette table sont automatiquement octroyés avec GRANT OPTION. Si vous révoquez ensuite le privilège CONTROL sur la table d'un utilisateur, cet utilisateur conservera les autres privilèges qui ont été automatiquement accordés. Pour révoquer tous les privilèges octroyés avec le privilège CONTROL, vous devez soit révoquer explicitement chaque privilège individuel, soit spécifier le mot clé ALL dans l'instruction REVOKE, par exemple:
   REVOKE ALL
     ON EMPLOYEE FROM USER HERON

Lorsque vous utilisez des tables basées sur un type structuré, les privilèges sur les tables et les vues sont concernés.

Remarque: Les privilèges peuvent être octroyés indépendamment à chaque niveau d'une hiérarchie de tables. Par conséquent, un utilisateur ayant octroyé un privilège sur une supertable au sein d'une hiérarchie de tables basées sur un type structuré peut également affecter indirectement les sous-tables. Toutefois, un utilisateur ne peut opérer directement sur une sous-table que si le privilège nécessaire est détenu sur cette sous-table.
Les relations supertable / sous-table entre les tables d'une hiérarchie de tables signifient que les opérations telles que SELECT, UPDATE et DELETE affectent les lignes de la table cible de l'opération et de toutes ses sous-tables (le cas échéant). Ce comportement peut être appelé substituabilité. Par exemple, supposons que vous ayez créé une table Employee de type Employee_t avec une sous-table Manager de type Manager_t. Un gestionnaire est un type d'employé (spécialisé), comme indiqué par la relation type / sous-type entre les types structurés Employee_t et Manager_t et la relation table / sous-table correspondante entre les tables Employee et Manager. Suite à cette relation, la requête SQL:
   SELECT * FROM Employee
renvoie l'identificateur d'objet et les attributs Employee_t pour les employés et les gestionnaires. De même, l'opération de mise à jour:
   UPDATE Employee SET Salary = Salary + 1000
donnera mille dollars d'augmentation aux gestionnaires ainsi qu'aux employés réguliers.

Un utilisateur disposant du privilège SELECT sur Employee pourra effectuer cette opération SELECT même s'il ne dispose pas du privilège SELECT explicite sur Manager. Toutefois, un tel utilisateur ne sera pas autorisé à effectuer une opération SELECT directement sur la sous-table du gestionnaire et ne pourra donc pas accéder aux colonnes non héritées de la table du gestionnaire.

De même, un utilisateur disposant du privilège UPDATE sur l'employé pourra effectuer une opération UPDATE sur le gestionnaire, affectant ainsi à la fois les employés et les gestionnaires réguliers, même sans avoir le privilège UPDATE explicite sur la table du gestionnaire. Toutefois, un tel utilisateur ne sera pas autorisé à effectuer des opérations UPDATE directement sur la sous-table Manager et ne pourra donc pas mettre à jour les colonnes non héritées de la table Manager.