gpt4 book ai didi

ORACLE PL/SQL - 授予/撤销权限

转载 作者:行者123 更新时间:2023-12-01 12:38:44 24 4
gpt4 key购买 nike

我希望能够在我的表中插入数据。插入数据后,人们只能更新整个表中的一列。我尝试在下面进行此操作,但出现错误 - ORA-04092:无法在触发器中提交或回滚:

这是我的触发器。我的想法是赋予所有权限让用户插入数据。插入数据后,仅删除一列的 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;
/

所以最后我们只能在表中插入数据后UPDATE 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;

但是我不知道怎么弄明白。谢谢。

最佳答案

您不能在触发器中授予撤销 权限。您似乎只想授予用户INSERTUPDATE(col4) 的能力。

CREATE TABLE tableName(
col1 INTEGER,
col2 INTEGER,
col3 INTEGER,
col4 INTEGER
);

GRANT INSERT ON tableName TO public;

GRANT UPDATE(col4) ON tableName TO public;

当然,这只会影响其他用户对该表的权限。表的所​​有者将始终有权更改表中的数据。我还假设您并不是真正授予 public 权限,而是授予您在系统中定义的与需要修改数据的业务角色相关的某些用户或角色。

关于ORACLE PL/SQL - 授予/撤销权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26954580/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com