Definitely don't manage this by creating trigger(s). Oracle has already written code to manage access -- you don't need to. A read-only tablespace is a fine option, another would be to only grant select on the table. If necessary, create the table in a new schema, only grant select on it to the old schema owner (or public), drop the old table, and create a synonym in the old schema (or public) that points to the new table. -- //www.freelists.org/webpage/oracle-l