Показаны сообщения с ярлыком 12.1. Показать все сообщения
Показаны сообщения с ярлыком 12.1. Показать все сообщения

понедельник, 19 мая 2014 г.

Oracle database 12c security enhancements

Рассмотрим новые для 12c системные привелегии "inherit [any] privileges".

Для проверки нам понадобится небольшая заготовка:

create user test1 identified by test default tablespace users;
grant create session to test1;
grant create table to test1;
alter user test1 quota 100M on users;
create table test1.testtab(c0 number not null);
create user test2 identified by test default tablespace users;
grant create session to test2;
grant create procedure to test2;
grant create view to test2;



Так как по-умолчанию привилегия "inherit privileges" выдана PUBLIC'у, мы ее отберем:

revoke inherit privileges on user test1 from public;

Согласно документации, системная привелегия "inherit [any] privileges" контроллирует набор привелегий доступных процедурам/функциям
запускаемым с правами вызывающего пользователя(authid current_user).
Пользователь test2 в нашем случае, обладает более узким набором прав в бзе данных и он будет создавать у себя различные объекты,
предоставляя доступ к ним для пользователя test1.

create or replace procedure test2.testproc authid current_user as
begin
for i in 1..100 loop
execute immediate 'insert into test1.testtab(c0) values('||round(dbms_random.value(0,100))||')';
end loop;
commit;
end;
/
grant execute on test2.testproc to test1;

Итак, в процедуре мы пытаемся внести записи в таблицу пользователя test1, процедура объявлена как исполняющаяся с правами вызывающего пользователя,
inherit privileges для test1 мы отняли.
Теперь вызовем эту процедуру из-под пользователя test1:

SQL> exec test2.testproc;
BEGIN test2.testproc; END;

*
ERROR at line 1:
ORA-06598: insufficient INHERIT PRIVILEGES privilege
ORA-06512: at "TEST2.TESTPROC", line 1
ORA-06512: at line 1

Но если бы мы не отняли inherit privileges для test1 у PUBLIC'а или выдали бы inherit any privileges пользователю test2, то ошибки бы не было.
Дадим test2 привилегию наследовать права от test1:

SQL> grant inherit privileges on user test1 to test2;

Grant succeeded.

SQL> exec test2.testproc;

PL/SQL procedure successfully completed.

Эта привилегия также будет актуальна при создании представлений с использованием функций использующих права вызываемого пользователя:

create or replace function test2.testfunc return number authid current_user as
retval number;
begin
execute immediate 'select max(c0) from test1.testtab' into retval;
return retval;
exception when others then return null;
end;
/
create or replace view test2.testview1 bequeath definer as select testfunc() c0 from dual;
create or replace view test2.testview2 bequeath current_user as select testfunc() c0 from dual;
grant select on test2.testview1 to test1;
grant select on test2.testview2 to test1;

Представление test2.testview1 ожидаемо не будет работать, будучи объявленным как bequeath definer,
функция, вызываемая в приложении будет выдавать ошибку, т.к. прав на test1.testtab у пользователя test2 нет:

SQL> select * from test2.testview1;
select * from test2.testview1
       *
ERROR at line 1:
ORA-00942: table or view does not exist
ORA-06512: at "TEST2.TESTFUNC", line 4

Проверим как это работает под пользователем test1 для представления объявленного как bequeath current_user:

SQL> revoke inherit privileges on user test1 from test2;

Revoke succeeded.

SQL> select * from test2.testview2;
select * from test2.testview2
                    *
ERROR at line 1:
ORA-06598: insufficient INHERIT PRIVILEGES privilege

SQL> grant inherit privileges on user test1 to test2;

Grant succeeded.

SQL> select * from test2.testview2;

              C0
----------------
             100

понедельник, 5 августа 2013 г.

Oracle 12c new features: pga_aggregate_limit

В версии 12с появилась возможность задавать жесткое ограничение на размер PGA. 
Раньше такой возможности, порой, не хватало.
Отвечает за это параметр pga_aggregate_limit.
Стоит обратить внимание, что этот параметр не играет роли для пользователя SYS и для фоновых процессов.