Different ways to make a table read only in a SQL Server database

 
--// Simple Read-Only
====================================================================
 
ALTER DATABASE [MyDB] ADD FILEGROUP [READ_ONLY_TBLS]
 
 
--// Using Triggers
====================================================================
 
CREATE TRIGGER trReadOnly_tblEvents ON tblEvents
    INSTEAD OF INSERT,
               UPDATE,
               DELETE
AS
BEGIN
    RAISERROR( 'tblEvents table is read only.', 16, 1 )
    ROLLBACK TRANSACTION
END
 
 
--// Put the Table in a Read Only File Group
====================================================================
USE [master]
GO
ALTER DATABASE [MyDB] ADD FILEGROUP [READ_ONLY_TBLS]
GO
ALTER DATABASE [MyDB] ADD FILE ( NAME = N'mydb_readonly_tables', FILENAME = N'C:\JSPACE\myDBReadOnly.ndf' , SIZE = 2048KB , FILEGROWTH = 1024KB ) TO FILEGROUP [READ_ONLY_TBLS]
GO
DROP table tblEvents
create table tblEvents
(
id int,
logEvent varchar(1000)
)
ON [READ_ONLY_TBLS]
ALTER DATABASE [MyDB] MODIFY FILEGROUP [READ_ONLY_TBLS] READONLY
 
 
 
--// DENY Object Level Permission
====================================================================
DENY INSERT, UPDATE, DELETE ON tblEvents TO Jugal
DENY INSERT, UPDATE, DELETE ON tblEvents TO Public
 

--// Simple Read-Only

====================================================================

ALTER DATABASE [MyDB] ADD FILEGROUP [READ_ONLY_TBLS]

 

 

--// Using Triggers

====================================================================

CREATE TRIGGER trReadOnly_tblEvents ON tblEvents

    INSTEAD OF INSERT,

               UPDATE,

               DELETE

AS

BEGIN

    RAISERROR( 'tblEvents table is read only.', 16, 1 )

    ROLLBACK TRANSACTION

END

 

 

--// Put the Table in a Read Only File Group

====================================================================

USE [master]

GO

ALTER DATABASE [MyDB] ADD FILEGROUP [READ_ONLY_TBLS]

GO

ALTER DATABASE [MyDB] ADD FILE ( NAME = N'mydb_readonly_tables', FILENAME = N'C:\JSPACE\myDBReadOnly.ndf' , SIZE = 2048KB , FILEGROWTH = 1024KB ) TO FILEGROUP [READ_ONLY_TBLS]

GO

DROP table tblEvents

create table tblEvents

(

id int,

logEvent varchar(1000)

)

ON [READ_ONLY_TBLS]

ALTER DATABASE [MyDB] MODIFY FILEGROUP [READ_ONLY_TBLS] READONLY

 

 

 

--// DENY Object Level Permission

====================================================================

DENY INSERT, UPDATE, DELETE ON tblEvents TO Jugal

DENY INSERT, UPDATE, DELETE ON tblEvents TO Public