Безпека для розробників додатків, які виконують PL / SQL роботу в Oracle


13

Як ви вирішуєте відсутність привілеїв рівня схеми в Oracle? Архітектура безпеки Oracle добре працює для програм, які потребують лише привілеїв рівня об'єкта, і вона добре працює для DBA, які потребують обмежень. Однак, мабуть, в архітектурі є великий проріз для програмістів, які займаються розробкою за допомогою додатка на передньому кінці та PL / SQL в декількох схемах. Ось кілька моїх варіантів із їхніми недоліками:

  1. Змусити кожного програміста робити розробку за власною схемою. DBA надаватиме привілеї для об'єктного рівня програмістам, які їх потребують. Будь-яка розробка пакету повинна здійснюватися DBA. Основним недоліком є ​​те, що програмісти будуть використовувати базу даних як бітове відшкодування на шкоду продуктивності бази даних. Я хочу, щоб програмісти розвивалися в базі даних, але цей метод сильно відлякує це.

  2. Дайте кожному програмісту ім'я користувача / пароль для схеми десятка або близько того, для чого вони повинні розвиватися. Надайте цій схемі програми дозвіл на створення процедур, таблиць тощо. Деякі недоліки цього підходу полягають у тому, що програмістам доводиться підтримувати декілька входів і є рідко входили в систему як самі. Розробка схресної схеми також складна.

  3. Надайте програмістам привілеї аутентифікації проксі для кожної схеми, для якої потрібно зробити розробку. Це дозволяє їм увійти в систему як самі, не надаючи їм інших привілеїв, крім привілеїв проксі. До недоліків можна віднести програмістів, які мають підтримувати окремі з'єднання для кожної схеми, для якої він є проксі-сервером, розробка крос-схеми є більш громіздкою, оскільки з'єднання потрібно постійно змінювати, а пакети, що використовують посилання загальнодоступної бази даних з пройденою автентифікацією, не збиратимуться всередині проксі-з'єднань.

  4. Надайте кожному програмісту пільги DBA. - Мінусом тут є безпека. Жоден програміст схеми не може бути захищений від будь-якої схеми, і будь-який програміст може представити себе за будь-якого іншого програміста (DBA).

Здається, відсутній варіант надання кожному програмісту SELECT / INSERT / CREATE / тощо. привілеї схеми, в якій вони потребують розробки. Вони увійшли, як самі, щоб виконувати свою роботу, використовуючи одне з'єднання. Нові об’єкти в схемі, до якої вони мають доступ, негайно доступні.

Я щось пропускаю? Як ви поводитесь із прикладними програмістами, які займаються розробкою PL / SQL?


3
Відмінне запитання +1 - це, у поєднанні з відсутністю інтегрованого управління джерелами, є головною проблемою для Oracle у середовищі для багатьох розробників.
ScottCher

Відповіді:


11

Ще в ті часи, коли я працював в магазині Oracle, у нас був специфічний сервер "dev" (розробка), який мав різні обмеження безпеки, ніж сервер "prod" (виробництво). Розробники могли робити все необхідне, і тоді ми передамо DBA необхідні сценарії, щоб застосувати їх до виробничого сервера.

У випадку з нашими критичними системами (SCT Banner, для відстеження класів та студентів та Oracle Financials) також існували "тестові" та "насінні" сервери. Тест був для тестування прийняття користувачем, перш ніж матеріали мігрували з розробника на продукт "seed" була інсталяцією програмного забезпечення на складі, тому, якщо ми знайдемо помилку, ми могли б перевірити, чи це щось, що ми ввели або прийшли від програмного забезпечення SCT або Oracle.


+1 За допомогою нашої бази загального користування розробники працюють над дуже різноманітними проектами, тому принцип найменшого привілею не дасть їм повного доступу навіть до сервера розробки. ( en.wikipedia.org/wiki/Principle_of_least_privilege )
Leigh Riffel

@Leigh - Напевно, я повинен був уточнити ... сервер розробок потрапив під те, що у вас було здебільшого №1, а не №4
Джо

1
Я пам’ятаю, що базу даних DEV клонували з виробництва, а потім ускладнювали дотації, які дозволяли розробникам працювати без обмежень. Зрештою, було простіше надати кожному розробнику власну базу даних та доступ до DBA. Потім буде подано зміни в Dev через цикл випуску. Зараз має бути простіше з віртуалізацією.
Сумнібот

@Sumnibot - простіше встановити підтримку, резервне копіювання тощо окремої бази даних для кожного розробника, ніж надавати їм дозволи! Окрім часу, необхідного для оновлення кожної з них, може здатися, що витрати на ліцензування будуть чималими чи ви не надали їм версії для підприємства?
Лі Риффер

1
Не містить конкретної відповіді для мене.
Майкл-О

3

Використовуйте ролі для асоціації колекцій об'єктів, а потім надайте доступ до ролей

Заява GRANT дозволяє DBA:

Об'єктні привілеї для певного об'єкта для користувачів, ролей та PUBLIC. У таблиці 18-2 перераховані привілеї об'єкта та операції, які вони авторизують.

Оскільки привілеї об’єктів можуть бути надані ролі, надати роль доступу до всіх таблиць на схемі порівняно просто:

sql> золотник privs.sql
sql> select 'grant select on scott.' || table_name || ' to role_select; ' з dba_tables, де owner = 'SCOTT';
sql> @ privs.sql
sql> надайте role_select Джону, Саму, Пітеру;

Це в поєднанні з GRANT CREATE TABLEвиданою відповідною користувачем схемою роллю означає, що розробники можуть вибирати та створювати таблиці. Це не ідеально, оскільки створена таблиця вимагає запустити сценарій заново, але WITH GRANT OPTIONпропонує кожен розробник може надавати доступ до створеної таблиці відповідної ролі.

Це говорить про те, що ви можете створити тригери рівня DDL, які можуть виконати відповідний процес надання, хоча, очевидно, значні обсяги тестування, це повинно бути можливим, щоб оператор таблиці таблиці автоматично надав відповідні дозволи на відповідні ролі.

Редагувати -

За даними GRANT , CREATE TABLEпільга:

Створіть таблицю в схемі отримувача.

Таким чином, даючи їм створити таблицю, змінити таблицю тощо .. від правильного користувача, вони повинні мати доступ до схеми цього користувача, як якщо б він був відповідним користувачем.


Я бачив методологію, на яку ви зверталися, без особливого успіху; однак я вважаю, що ви вірні, що це можна зробити за допомогою широкого тестування. Проблема полягає в тому, що це дозволяє лише розробникам вибирати доступ на таблицях. Надання створення таблиці безпосередньо або за допомогою ролі дає лише їм створювати привілеї таблиці за власною схемою. Вони все ще не можуть створювати таблиці, процедури, пакети, тригери чи будь-які інші об'єкти в будь-якій схемі, крім власної, або ви вважаєте, що вони повинні створювати лише об'єкти у власній схемі навіть у процесі розробки?
Лі Риффер

@Leigh Оновлено деталями.
Брайан Балсун-Стентон

Просто Oracle не працює. Спробуйте: створити користувача u1, ідентифікованого "ThisIsMy1Password"; створити користувача u2, ідентифікований "ThisIsMy1Password"; надайте dba до u1; надайте підключення до u2; підключити u1 / "ThisIsMy1Password" @db; надати створення таблиці u2; підключити u2 / "ThisIsMy1Password" @db; створити таблицю u1.t1 (c1 varchar2 (10)); Останній крок провалюється з недостатньою кількістю привілеїв.
Лей Ріффел
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.