Comment puis-je m'assurer que les données spécifiques de la base de données ne sont plus modifiées?Création efficace d'enregistrements de base de données en lecture seule
Nous travaillons avec TSQL. Dans la base de données, nous stockons les révisions de contrat. Ceux-ci ont un statut: brouillon/actif. Lorsque le statut est activé, la révision peut ne plus jamais être modifiée. Une révision peut avoir 8 modules actifs (chacun avec sa propre table), chacun avec leurs propres paramètres et sous-tables. Cela crée un arbre entier de tables avec des enregistrements qui ne peuvent plus jamais changer lorsque la révision du contrat a été définie sur active.
Idéalement, je marquerais simplement ces enregistrements en lecture seule. Mais une telle chose n'existe pas aujourd'hui. La prochaine chose qui vient à l'esprit sont les déclencheurs. Je dois donc ajouter ces déclencheurs à un grand nombre de tables, toutes liées à la révision du contrat.
Maintenant peut-être il existe d'autres approches, comme une base de données uniquement pour l'archivage sur lequel l'utilisateur a seulement des droits d'insertion. Ainsi, lorsqu'une révision de contrat est devenue active, elle est déplacée d'un DB vers le DB d'archivage (l'insertion est autorisée). Et ne peut plus jamais être modifié (DENY UPDATE | DELETE).
Mais peut-être y at-il d'autres options plus ingénieuses auxquelles je n'ai pas pensé, et vous l'avez fait. Peut-être y compris le CLR ou quoi d'autre.
Alors, comment est-ce que je peux créer une arborescence d'enregistrements dans notre base de données TSQL qui est la plus simple, facile à comprendre, à configurer rapidement et qui peut être appliquée de la manière la plus générique?
restreindre les utilisateurs afin d'effectuer les changements. Faites en sorte que les utilisateurs qui ont accès auxdites tables aient uniquement des autorisations d'insertion, de suppression ou de mise à jour. – Takarii
Peut-être que cette question peut être utile: http://stackoverflow.com/questions/11185932/how-can-i-disable-update-table-for-all-user –
@Takarii Merci pour votre commentaire. Cela ne résout toutefois pas le problème, car nous voulons également éviter que des bogues dans les procédures stockées et EF ne puissent altérer ou supprimer accidentellement les données. Imaginez des jointures défectueuses dans une instruction UPDATE. Il y a beaucoup de propagation de code en SQL et C# qui fait quelque chose pour une révision de contrat ou un de ses modules. –