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
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. –
autre que les utilisateurs de l'admin système – Jeyavel