2014-11-16 1 views
3

Я хочу иметь возможность вставлять данные в таблицу. Как только данные вставляются, люди могут только ОБНОВИТЬ один столбец во всей таблице. Я пытаюсь сделать это ниже, но получаю ошибку - ORA-04092: не может COMMIT или ROLLBACK в триггере:ORACLE PL/SQL - GRANT/REVOKE Привилегия

Вот мои триггеры. Моя идея заключалась в том, чтобы предоставить все привилегии, чтобы пользователь вставлял данные. После ввода данных удалите привилегию 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; 
/

Таким образом, в конце концов, мы можем только обновит COL4 из TABLENAME после вставки данных в таблице. Если мы делаем:

INSERT INTO tableName VALUES(1,2,3,4); 
1 row created 

я могу сделать только

UPDATE tableName 
SET col4= 10 
WHERE col1=1; 

Это UPDATE ниже не будут работать:

UPDATE tableName 
SET col2= 10 
WHERE col1=1; 

Но я не знаю, как понять это. Спасибо.

+0

'Grant insert' на' уровне таблицы', но 'grant update' только на' уровне столбца'. –

ответ

4

Вы не можете grant или revoke привилегии в курок. Похоже, вы просто хотите предоставить пользователям возможность INSERT и UPDATE(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, а определенному пользователю или роли, которые вы определили в своей системе, связанной с бизнес-ролью, требующей изменения данных.

+0

Работает как CHARM! Спасибо вам. – Thapipo

 Смежные вопросы

  • Нет связанных вопросов^_^