【发布时间】:2015-01-13 07:06:06
【问题描述】:
我希望能够在我的表中插入数据。一旦插入数据,人们只能更新整个表中的一列。我尝试在下面执行此操作,但出现错误 - ORA-04092: cannot COMMIT or ROLLBACK in a trigger:
这是我的触发器。我的想法是赋予用户插入数据的所有权限。插入数据后,只删除一列的 UPDATE 权限。假设我们有这张桌子:
CREATE TABLE tabelName(
col1 INTEGER,
col2 INTEGER,
col3 INTEGER,
col4 INTEGER
);
CREATE OR REPLACE TRIGGER TRG_TABLENAME_BI
BEFORE INSERT
ON TABLENAME
BEGIN
EXECUTE IMMEDIATE 'GRANT ALL ON TABLENAME TO PUBLIC';
END;
/
CREATE OR REPLACE TRIGGER TRG_TABLENAME_AI
AFTER INSERT
ON TABLENAME
BEGIN
EXECUTE IMMEDIATE 'REVOKE UPDATE (col1,col2,col3) TABLENAME to PUBLIC';
END;
/
所以最后我们只能在向表中插入数据后更新tableName的col4。如果我们这样做:
INSERT INTO tableName VALUES(1,2,3,4);
1 row created
我只能这样做
UPDATE tableName
SET col4= 10
WHERE col1=1;
下面的这个更新不起作用:
UPDATE tableName
SET col2= 10
WHERE col1=1;
但我不知道如何弄清楚。 谢谢。
【问题讨论】:
-
Grant insert在table level上,但grant update仅在column level上。
标签: oracle plsql privileges grant