0

我们的数据库中有一个包含几十行的表。唯一适用于表的 DML 是:

1.插入- 由于在另一个表上执行触发器而插入行。

2.删除- 一个计划的过程正在将请求的记录加载到临时表,处理这些记录,然后从特定表中删除它们(还有一个 SELECT 从表中,以便在每次过程运行时填充临时表) .

我们已经使用 PK 构建了表,当我们运行删除时,该表将使用 PK 列的 ID 逐行删除。

只是为了澄清,我们在桌子上没有任何更新操作。

创建这样的表(没有更新)时是否有任何具体的指导方针或建议?

谢谢你的回答。

4

2 回答 2

1

您不打算更新的表没有什么特别之处。

如果出于安全原因需要,您可以拒绝每个人的更新权限,因为您实际上只想允许插入、删除和选择,但设计没有什么特别之处,也没有强迫您这样做。

于 2013-01-01T17:05:04.247 回答
0

您可以在另一个模式中创建此表,并在不授予更新的情况下授予您的模式选择、插入、删除,因此任何从当前模式执行更新状态的尝试都不会执行。

这是一个例子:

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 表名

问候,

于 2013-01-01T18:54:44.500 回答