2010-03-27 9 views
19

Je suis en train de mettre à jour un ensemble d'enregistrements dans cette table, après que je dois faire en sorte que cette table soit lue seulement.Comment créer une table en lecture seule dans SQL Server?

Alors, comment faire une table en lecture seule dans SQL Server?

+0

Plusieurs bonnes réponses ici. Ma question est la suivante: pour qui la table doit-elle être en lecture seule? Les administrateurs système ont toujours le pouvoir de faire quoi que ce soit, même si cela peut leur prendre du temps et des efforts. –

+1

autre que les utilisateurs de l'admin système – Jeyavel

Répondre

29

Une alternative simple qui pourrait bloquer la mise à jour et insérer sur une table spécifique, mais en permettant de supprimer:

ALTER TABLE mytable WITH NOCHECK ADD CONSTRAINT chk_read_only CHECK(1 = 0) 

Attention: ce évite INSERTs et mises à jour, mais permet DELETE.

Si vous avez vraiment besoin d'une table pour être vraiment en lecture seule, vous pouvez aussi soit:

a) le mettre dans sa propre base de données ou
b) le mettre sur un groupe de fichiers et la marque que lecture seule, voici comment:

USE [master] 

GO 

ALTER DATABASE [csvtosp] ADD FILEGROUP [READONLYTABLES] 

GO 

ALTER DATABASE [csvtosp] ADD FILE (NAME = N'mydb_readonly_tables', FILENAME = N'G:\SQL2005DATA\mydb_readonly_tables.ndf' , SIZE = 3072KB , FILEGROWTH = 1024KB) TO FILEGROUP [READONLYTABLES] 

GO 

USE csvtosp 

GO 

DROP TABLE mytable 

CREATE TABLE mytable (

    somedata char(8000) not null 

) ON READONLYTABLES 

GO 

Pour plus de détails sur ce sujet, rendez-vous ici:

How to make a table Read Only in SQL Server

+2

J'ai essayé d'améliorer cette réponse, mais ma modification a été rejetée. Veuillez ajouter le code manquant pour rendre un groupe de fichiers en lecture seule: 'ALTER DATABASE [csvtosp] MODIFIER FILEGROUP [READONLYTABLES] READONLY' – Baodad

+0

1. Le groupe de fichiers' READONLYTABLES' n'est pas READONLY 2. Pas besoin de déposer la table pour la déplacer vers un autre groupe de fichiers . Vous avez juste besoin de recréer l'index clusterisé. –

2

Si vous voulez le lire au grand public, mais que vous voulez pouvoir modifier le tableau ultérieurement, vous pouvez envisager de créer plusieurs utilisateurs pour la base de données et d'accorder différentes autorisations à cette base de données. faire cela de toute façon et ne pas permettre l'accès grand public à modifier table, tronquer etc.

7
  1. Trigger avec rollback trans
  2. Lire seulement filegroup
  3. ne pas accorder insertion/mise à jour/supprimer des autorisations

Le numéro 3 est probablement la meilleure pratique. Par exemple, si votre connexion est par exemple db_owner, le déclencheur peut être désactivé ou déclencher la table vers un autre groupe de fichiers.

Questions connexes