我们的数据库中有一个包含几十行的表。唯一适用于表的 DML 是:
1.插入- 由于在另一个表上执行触发器而插入行。
2.删除- 一个计划的过程正在将请求的记录加载到临时表,处理这些记录,然后从特定表中删除它们(还有一个 SELECT 从表中,以便在每次过程运行时填充临时表) .
我们已经使用 PK 构建了表,当我们运行删除时,该表将使用 PK 列的 ID 逐行删除。
只是为了澄清,我们在桌子上没有任何更新操作。
创建这样的表(没有更新)时是否有任何具体的指导方针或建议?
谢谢你的回答。
我们的数据库中有一个包含几十行的表。唯一适用于表的 DML 是:
1.插入- 由于在另一个表上执行触发器而插入行。
2.删除- 一个计划的过程正在将请求的记录加载到临时表,处理这些记录,然后从特定表中删除它们(还有一个 SELECT 从表中,以便在每次过程运行时填充临时表) .
我们已经使用 PK 构建了表,当我们运行删除时,该表将使用 PK 列的 ID 逐行删除。
只是为了澄清,我们在桌子上没有任何更新操作。
创建这样的表(没有更新)时是否有任何具体的指导方针或建议?
谢谢你的回答。
您不打算更新的表没有什么特别之处。
如果出于安全原因需要,您可以拒绝每个人的更新权限,因为您实际上只想允许插入、删除和选择,但设计没有什么特别之处,也没有强迫您这样做。
您可以在另一个模式中创建此表,并在不授予更新的情况下授予您的模式选择、插入、删除,因此任何从当前模式执行更新状态的尝试都不会执行。
这是一个例子:
connect system/manager
grant connect, resource to user1 identified by user1;
grant connect, resource to user2 identified by user2;
disconnect
connect user1/user1
create table user1.table1(col1 number, col1_desc varchar2(16));
grant select, insert, delete on user1.table1 to user2;
disconnect
conn user2/user2
select * from user1.table1
insert into user1.table1 values (1, 'insert-user2');
commit;
insert into user1.table1 values (2, 'insert-user2');
commit;
delete from user1.table1 t where t.col1 = 2;
commit;
update user1.table1 t set t.col1_desc = 'ins-user2' where t.col1 = 1;
commit;
-- last update statement will throw ORA-01031: insufficient privileges
注意:您可以使用 user1.table1 的同义词直接从 user2 使用 table1 表名
问候,