пятница, 13 сентября 2013 г.

Уязвимость в системе безопасности при выдаче привилегии GRANT SELECT на таблицу

При выдаче привилегии GRANT SELECT на таблицу пользователь другой схемы данных поличивший привилегию кроме возможности чтения данных получает неявно возможность заблокировать данные командой select for update.

четверг, 12 сентября 2013 г.

Некоторые новые возможности в базе 12C

1.Наконец появился синтаксис для страничной выборки данных.
Синтаксис таков.
o53asktom-f1

 Пример выборки пяти первых записей.

SQL> create table t
  2  as
  3  select * from all_objects;
Table created.

SQL> create index t_idx 
on t(owner,object_name);
Index created.

SQL> select owner, object_name, object_id
  2    from t
  3   order by owner, object_name
  4   FETCH FIRST 5 ROWS ONLY;
…
——————————————————————————————————————————————————————————————————————————————
| Id |Operation                     | Name|Rows  |Bytes |Cost (%CPU)|Time    |
——————————————————————————————————————————————————————————————————————————————
|   0|SELECT STATEMENT              |     |    5 | 1450 |    7   (0)|00:00:01|
|*  1| VIEW                         |     |    5 | 1450 |    7   (0)|00:00:01|
|*  2|  WINDOW NOSORT STOPKEY       |     |    5 |  180 |    7   (0)|00:00:01|
|   3|   TABLE ACCESS BY INDEX ROWID|T    |87310 | 3069K|    7   (0)|00:00:01|
|   4|    INDEX FULL SCAN           |T_IDX|    5 |      |    3   (0)|00:00:01|
——————————————————————————————————————————————————————————————————————————————

Predicate Information (identified by operation id):
—————————————————————————————————————————————————————————————————

1 - filter("from$_subquery$_003"."rowlimit_$$_rownumber"<=5)
2 - filter(ROW_NUMBER() OVER ( ORDER BY "OWNER","OBJECT_NAME")<=5)

Пример выборки пяти записей начиная с пятой.


SQL> select owner, object_name, object_id
  2    from t
  3   order by owner, object_name
  4   OFFSET 5 ROWS FETCH NEXT 5 ROWS ONLY;


2. Поля SQL VARCHAR2, NVARCHAR2 теперь могут хранить до 32Кб значений.
3. В сотни раз по сравнению с 11G увеличена производительность команды добавления колонки со значением по умолчанию.

SQL> alter table t 
add (data char(2000) default 'DEFAULT VALUE');

4. Добавлено ключевое слово DEFAULT для вставки значения по умолчанию в командах INSERT/UPDATE 

SQL> create table test_table
  2  ( id int
  3      generated by default
  4          as identity
  5          ( start with 33
  6            increment by 10 )
  7          primary key,
  8    val varchar2(100)
  9  )
 10  /
Table created. 
SQL>  insert into test_table (id, … ) 
   values ( DEFAULT, … );
Вставляет значение по умолчанию 33 из последовательности.
SQL>  insert into test_table (id, … ) 
   values ( 10, … );

вставляет значение 10.

четверг, 16 августа 2012 г.

Apex Listener 2.0 Beta доступен для изучения

Apex Listener 2.0 Beta доступен для изучения и скачивания.

Изменения относительно версии  1.1.4

Поддержка нескольких соединений с базой данных.
Утилита командной строки.
Изменение структуры файла конфигурации.
А также:
Moved storage of RESTful Services (aka Resource Templates) to the Oracle Application Express Schema
Design and creation of RESTful Services is now done using Oracle Application Express
Graphical administration of Oracle Application Express Listener is now done using Oracle SQL Developer
RESTful Services are now protected via the OAuth2 Protocol.

понедельник, 2 апреля 2012 г.

Анализ сжатия данных

Анализ сжатия производился на двух таблицах с количеством 12314345 и 9759284 записей и обьемом данных до сжатия 220 и 1080 мегабайт соответственно. Измерение производительности производилось командой select count(1) from table. Сервер базы данных версии 11.1.0.7 на операционной системе AIX.

До сжатия среднее время выполнения запросов составляло 17.69 и 13.9 секунд.
Сжатие производилось командой alter table таблица move compress for all operations;
После сжатия были получены обьемы данных 73 и 360 мегабайт. Скорость выполнения запроса возросла до 9.9 и 5.8 секунд соответственно.
В итоге обьем занимаемый данными в базе сократился приблизительно в 3 раза а время выполлнения запроса сократилось (производительность увеличилась) в 1.8 и 2.4 раза.

пятница, 22 июля 2011 г.

Пример приложения (SampleApp) для Oracle Business Intelligence Suite Enterprise Edition Plus (EE) от Oracle

   Пример приложения (SampleApp) для Oracle Business Intelligence Suite Enterprise Edition Plus (EE) представляет собой всеобъемлющую коллекцию примеров, призванных продемонстрировать возможности Oracle BI 11.1.1.5 и дизайна передового опыта. Она объединяет несколько интегрированных продуктов Oracle BI и технологий и показывает, как они могут беспрепятственно работать вместе в решении функциональных проблем. Эти примеры включают последние OBIEE 11g функциональность (enhanced visualizations, Action Framework, BI Publisher, Scorecards, Mobile), а также OBIEE архитектура ядра примеры (Semantic layer modeling, Multi-source federation, интеграции с такими продуктами, как Essbase, Oracle OLAP, ODM, TimesTen , ODI и более).

Скачать установочные файлы и образ для VirtualBox

вторник, 5 июля 2011 г.

Скрипт создания пользователя OeBS

Разработчику OeBS очень полезно для создания пользователя системы иметь скрипт для добваления пользователя на новых базах. Нижеприведенный скрипт создает пользователя системы, создает работника в модуле учет персонала и сопоставляет его с пользователем, добавляет базовые полномочия для разработки и администрирования.


-- Создание пользователя
declare
l_user     number;
l_resp     number;
l_appl     number;

l_responsibility_key     fnd_responsibility.responsibility_key%TYPE   := 'SYSTEM_ADMINISTRATOR';
l_application_short_name fnd_application.application_short_name%TYPE  := 'SYSADMIN';

l_responsibility_name    varchar2(200) := 'System Administrator';
l_security_group_id      number := 0;
l_user_name              varchar2(200) := 'ATYSHENKO';
l_unencrypted_password   varchar2(200) := 'password';
l_owner                  varchar2(200) := 'CUST';


l_user_id                         number;  
l_person_id                       number;
l_assignment_id                   number;
l_per_object_version_number       number;
l_asg_object_version_number       number;
l_per_effective_start_date        date;
l_per_effective_end_date          date;
l_employee_number                 varchar2(200);
l_full_name                       varchar2(2000);
l_per_comment_id                  number;
l_assignment_sequence             number;
l_assignment_number               varchar2(200);
l_name_combination_warning        boolean;
l_assign_payroll_warning          boolean;
l_orig_hire_warning               boolean; 
begin

select u.user_id
into l_user
from fnd_user u
where u.user_name = 'AUTOINSTALL';
--
select r.responsibility_id, r.application_id
into l_resp, l_appl
from fnd_responsibility_tl r
where r.language = 'US'
and r.responsibility_name = l_responsibility_name;

dbms_output.put_line('инициализация...');    
fnd_global.apps_initialize(l_user, l_resp, l_appl);
dbms_output.put_line('приложение инициализировано');  
--  hr_utility.switch_logging_on;
-- создать работника
hr_employee_api.create_employee(p_hire_date => to_date('01.02.2011','dd.mm.yyyy')
,p_business_group_id => l_security_group_id
,p_last_name         => 'Тышенко'
,p_first_name        => 'Александр'
,p_middle_names      => 'Анатольевич'
,p_sex               => 'M'
,p_date_of_birth     => to_date('21.06.1970','dd.mm.yyyy')
,p_employee_number           => l_employee_number      
,p_person_id                 => l_person_id
,p_assignment_id             => l_assignment_id
,p_per_object_version_number => l_per_object_version_number   
,p_asg_object_version_number => l_asg_object_version_number
,p_per_effective_start_date  => l_per_effective_start_date
,p_per_effective_end_date    => l_per_effective_end_date
,p_full_name                 => l_full_name
,p_per_comment_id            => l_per_comment_id
,p_assignment_sequence       => l_assignment_sequence
,p_assignment_number         => l_assignment_number
,p_name_combination_warning  => l_name_combination_warning
,p_assign_payroll_warning    => l_assign_payroll_warning
,p_orig_hire_warning         => l_orig_hire_warning
);
dbms_output.put_line('создан пользователь person_id='||l_person_id);

if not fnd_user_pkg.userExists(l_user_name) then
l_user_id := fnd_user_pkg.CreateUserId(
x_user_name            => l_user_name
, x_owner                => l_owner
, x_unencrypted_password => l_unencrypted_password
,x_employee_id           => l_person_id
);

dbms_output.put_line('создан пользователь user_name='||l_user_name);
else
select u.user_id
into l_user_id
from fnd_user u
where u.user_name = l_user_name;   
end if;   

for i  in (select r.application_id,
r.responsibility_id,
r.responsibility_name
from fnd_responsibility_tl r
where r.language = 'RU'
and r.RESPONSIBILITY_NAME in ('Системный администратор' ,'Интегрированный шлюз SOA' ,'Глобальный суперпользователь-руководитель СУПЕР' ,'Администратор функций' ,'Разработчик приложений')
and not exists(select *
from fnd_user_resp_groups urg
where urg.RESPONSIBILITY_ID = r.responsibility_id
and urg.RESPONSIBILITY_APPLICATION_ID = r.application_id
and urg.user_id = l_user_id)) loop   

fnd_user_resp_groups_api.insert_assignment(
user_id                         => l_user_id
, responsibility_id             => i.responsibility_id
, responsibility_application_id => i.application_id
, security_group_id             => l_security_group_id
, start_date                    => trunc(sysdate) 
, end_date                      => NULL
, description                   => i.responsibility_name
);

fnd_wf_engine.default_event_raise(
'oracle.apps.fnd.security.user.assignment.change'
, l_user_id || ':' || i.responsibility_id
);

fnd_wf_engine.propagate_user_role(
'FND_USR'
, l_user_id
, 'FND_RESP' || i.application_id
, i.responsibility_id
, trunc(sysdate)
, NULL
);

-- Added for Function Security Cache Invalidation Project
fnd_function_security_cache.insert_user_resp(
l_user_id
, i.responsibility_id
, i.application_id
);      
dbms_output.put_line('добавлена привилегия responsibility_id='||i.responsibility_id||' responsibility_name='||i.responsibility_name);  
end loop;    
commit; end; 

четверг, 23 июня 2011 г.

Открытие доступа к результатам работы Concurrent запросов для просмотра другими пользователями.

Иногда при работе с OeBS возникает необходимость просмотреть результаты работы Concurrent запроса другого пользователя. Сделать это можно под полномочием "Системный администратор" в пункте меню "Параллельные\Запросы" в открытой форме необходимо перейти в верхнем меню на "Справка\Диагностика\Пользовательский код\Персональная настройка" и заполнить на двух закладках так как показано на копиях экрана.