2010-10-26 6 views
2

Contexte: la table de journalisation change, et nous ne voulons pas gâcher accidentellement les entrées du journal. Ceci est une application interne, non financière, donc nous ne sommes pas inquiets de la modification hostile.Oracle: créer une table WORM (write-once, read-many)?

Je pensais que je pouvais révoquer supprimer/mettre à jour, mais il se trouve que vous ne pouvez pas le faire vous-même:

ORA-01749: you may not GRANT/REVOKE privileges to/from yourself 

Quelle est la manière la plus canonique de le faire?

Répondre

4

Vous ne devez pas utiliser de déclencheurs pour appliquer les exigences de sécurité.

Vous devez créer la table appartenant à un autre schéma, puis accorder uniquement les privilèges nécessaires (par exemple, INSERT).

+0

Vous avez maintenant besoin d'un autre schéma pour la journalisation. Dans certains cas, c'est acceptable, mais pas toujours. –

+1

La norme serait la suivante. Le déclencheur est correct, mais je dirais que c'est une meilleure solution. Vous pouvez même faire abstraction de l'insertion réelle à l'aide d'une procédure et octroyer uniquement l'accès à la proc, en veillant à ce que les enregistrements insérés soient corrects. – REW

+0

@ Adam, les schémas sont bon marché. Je demande régulièrement des schémas supplémentaires aux DBA chaque fois que le design les appelle. Je ne vois pas pourquoi les schémas supplémentaires seraient un problème pour quiconque. –

1

Créez un BEFORE UPDATE et/ou un déclencheur BEFORE DELETE sur la table, ce qui provoquera TOUJOURS une exception.

+1

-1: les triggers peuvent être désactivés –

Questions connexes