Oracle Developer👨🏻‍💻
3.24K subscribers
664 photos
90 videos
2 files
554 links
🔝 канал о разработке в СУБД Oracle:
SQL, PL/SQL, оптимизация, архитектура и многое другое...

Backend-pro.ru - обучение по различным программам, связанных с backend-разработкой для ФЛ и ЮЛ.

Отец-основатель: @denis_dbd Кивилёв Денис
Download Telegram
Права доступа в Oracle💥

Друзья, всем привет!

С вами Костя Андронов 👋
И это мой первый технический пост на канале. Сегодня разберёмся с правами доступа в Oracle💥

🔐 Привилегии в Oracle делятся на 2 типа


1️⃣ Системные — дают возможность выполнять действия в БД в целом.

Пример:
grant create table to HR;

Позволяет создавать таблицы пользователю HR.

Где посмотреть детали:
👉Вью DBA_SYS_PRIVS - содержит информацию о всех выданных системных привилегиях

Кто выдаёт/забирает:
• те, кому выдали привилегию с опцией ADMIN OPTION
• те, у кого есть привилегия GRANT ANY PRIVILEGE

2️⃣ Объектные — управляют доступом к конкретным объектам (таблицам, представлениям и т.д.)

Пример:
grant select on HR.DEPARTMENTS to USR;

Даёт право читать данные из этой таблицы.

Где посмотреть детали:
👉 Вью DBA_TAB_PRIVS - содержит информацию о всех выданных объектных привилегиях

Кто выдаёт/забирает?
• владелец объекта
• те, у кого есть право GRANT ANY OBJECT PRIVILEGE
• те, кому выдали привилегию с опцией WITH GRANT OPTION

А теперь представим ситуацию:
Создали новую таблицу, как выдать права:
– бизнес-пользователям — только чтение
– разработчикам — все DML операции

Выдавать вручную каждому?
Долго и неудобно.
Решение — роли. Это набор привилегий, который можно назначать пользователям (и даже другим ролям).

create read_only_role;
create dev_role;

grant read_only_role to busines_user;
grant read_only_role to dev_role;

grant dev_role to dev_user;


Каждый получает ровно то, что ему нужно — и не больше 🔥
Выдать права на новую таблицу можно всем пользователям в 2 команды:
grant select on tst_table to read_only_role;
grant insert, update, delete on tst_table to dev_role;


Если интересно подробнее узнать о правах доступа в Oracle, то ставьте 👍

#oracle #backendpro #теория #grant #права #Konstantin_Andronov

Канал Oracle Developer | Чатик 💬
Мини-курс Оптимизация: Быстрый старт 🚀
👍478🔥6
Права доступа в Oracle. Часть 2 💥

Друзья, всем привет!

В продолжение поста Кости про права.
Один из подписчиков, к слову сказать, наш студент, обучавшийся на курсе по PL/SQL, правильно подметил, что в Oracle 12c появился новый объектный грант - READ.

Что это за грант такой и в чем отличие от SELECT?

Мы привыкли, что если нужен доступ к объекту, то достаточно выдать грант SELECT:
grant select on some_table to some_user;


Однако SELECT позволяет выполнять, в том числе, операцию блокировки строки - SELECT ... FOR UPDATE. Всегда ли это нужно? Хороший вопрос.

Видимо, проблема назрела, и Oracle сделали новый грант - READ, который позволяет выполнять выборку из таблицы, но без возможности блокировки:

grant read on some_table to some_user;


Так уже не напишешь
select * from some_table where ... for update;


Документация Oracle 12.2c

Коллеги, очень классно, что вы делитесь такими особенностями - не всегда они попадают в поле зрения 👍🏻

Всем хорошего дня ☀️

#oracle #backendpro #теория #grant #права #Denis_Kivilev
Канал Oracle Developer | Чатик 💬
Мини-курс Оптимизация: Быстрый старт 🚀
👍293🆒1
🔐 Роли в Oracle

Друзья, всем привет! 👋🏻
В личку мне начали задавать вопросы, мол, Денис, было бы неплохо рассказать чуть больше про роли - что это, зачем, как использовать и т.п.
Почему бы и нет? Материал рассчитан на Junior-разработчиков.

Роли в Oracle - инструмент, который часто недооценивают, но который может здорово упростить жизнь администратору и разработчику 🚀

Что это такое?
Роль - это контейнер для набора привилегий. Вместо того чтобы выдавать пользователю десятки прав по отдельности, мы создаём роль, наделяем её нужными правами и назначаем пользователю.

Пример использования
1️⃣ Создаём роль:

CREATE ROLE analyst_role;


2️⃣ Даём привилегии:

GRANT SELECT ON sales TO analyst_role;
GRANT SELECT, UPDATE ON customers TO analyst_role;


3️⃣ Назначаем роль пользователю:

GRANT analyst_role TO ivan;

Теперь Иван получает доступ ко всем объектам, указанным в роли, без индивидуальной раздачи прав.

Профит для пользователя
💡 Меньше хаоса в правах.
💡 Легко добавлять/удалять доступ.
💡 Быстро подключать новых сотрудников/приложения к проекту.

Как посмотреть, что внутри роли?

Для своих ролей:
SELECT * FROM USER_ROLE_PRIVS;

Для анализа, какие привилегии входят в роли:
SELECT * FROM ROLE_SYS_PRIVS;
SELECT * FROM ROLE_TAB_PRIVS;


Для полной картины (только DBA): DBA_ROLE_PRIVS, DBA_ROLES.

Роли можно наследовать
Например, роль SELECT_CATALOG_ROLE содержит в себе роль HS_ADMIN_SELECT_ROLE.
Представления для просмотра иерархии ролей - ROLE_ROLE_PRIVS.

Особенности использования ролей
▫️ Если роль слишком “широкая”, можно случайно открыть доступ лишним пользователям.
▫️ Роли можно наследовать от других ролей - может быть сложновато понять, откуда ноги растут.
▫️ Есть особенности работы с ролями в PL/SQL-модулях и правами на объекты. Например, если вы дали роли select на таблицу и она используется в PL/SQL-процедуре, то пользователь столкнется с ошибкой отсутствия доступа к таблице 🤷🏻‍♂️ При этом выполнение того же select вне PL/SQL-кода будет без ошибок.

Если интересно ставь палец вверх и мы расскажем об этом в одном из следующих постов 👍🏻

Всем хорошей трудовой недели 👨🏻‍💻

#oracle #backendpro #теория #grant #права #Denis_Kivilev
Канал Oracle Developer | Чатик 💬
Мини-курс Оптимизация: Быстрый старт 🚀
👍264🦄1
Пятничного юмора в канал 😊

Всем хороших выходных ☀️

#oracle #backendpro #юмор
Канал Oracle Developer | Чатик 💬
Мини-курс Оптимизация: Быстрый старт 🚀
😁22🔥63👍3🦄1
Индусы тебя заменят

Друзья, всем привет!

Хех, вот это новые тренды - подмога в виде индусов "Вельком ту Оракль" 🇮🇳
А куда подевались прежние айтишники? 😄

Хотя я сам сейчас не на российском рынке труда, но с удовольствием узнал бы подробнее, что же там за новые тенденции 💁🏻

А вам интересно?
Если ДА - ставьте 🔥
Если НЕТ - 🦄

Наберём 50 огоньков - приглашу Любу к нам на часик, и она расскажет подробнее о меняющемся рынке труда в России под натиском IT-мигрантов
Бесплатно, но без записи 😊

Для тех, кто с нами недавно
Люба Прохорова - очень опытный специалист в сфере построения карьеры. Часто участвует в наших встречах и курсах, помогает прокачивать карьеру ребят, выступает на разные темы. Когда-то она лично помогла мне перейти в иностранную компанию на позицию Java-разработчика

Ставь реакцию 🔥 или 🦄

#карьера
Канал Oracle Developer | Чатик 💬
Мини-курс Оптимизация: Быстрый старт 🚀
🔥87🦄81
Анонс встречи с Любой

Друзья, всем привет!

Вижу по вашим реакциям на предыдущий пост, что тема актуального состояния российского рынка и ИТ-мигрантов вам интересна. Отлично! 🔥

3 сентября в 19:00 состоится встреча с Любой Прохоровой.

Пока не буду раскрывать все подробности, но Люба затронет темы миграции ИТ-специалистов из РФ и в РФ, а также текущие тенденции на рынке.
Больше информации опубликую 1 сентября 🎓

А пока отметьте в календаре время с 19:00 до 20:00 МСК 3 сентября. Будет интересно! 😉

Вход бесплатный, всего 100 мест и записи традиционно не будет

#карьера
Канал Oracle Developer | Чатик 💬
Мини-курс Оптимизация: Быстрый старт 🚀
👍172
Марафон SQL-задач с LeetCode. Уровень Easy

Коллеги, всем привет!

На связи Денис. Что-то у нас давно не было «движухи» (модное нынче слово) в канале 🏃🏻‍♂️🏃‍♀️

Я решил «тряхнуть стариной» и пошерстить LeetCode 😊
Из этого родилась идея конкурса с призовым фондом аж 6000 рублей на пятничное пивко или чай 🍺

Суть марафона
🔸 Начиная с 11:00 МСК, каждый час я буду публиковать SQL-задачки.
🔸 Всего будет 5️⃣ задач, уровень — Easy.
🔸 В 17:00 МСК размещу форму для отправки ваших ответов. Среди участников разыграю призы.
🔸 Присылать ответы можно будет до 12:00 пятницы.

Принцип розыгрыша
С помощью рандомайзера выберем трёх счастливчиков из тех, кто прислал свои ответы:

🏆 Первое место — 3 000 руб.
🥈 Второе место — 2 000 руб.
🥉 Третье место — 1 000 руб.

На пятничную вкусняшку точно хватит 😉

Почему Easy?
1️⃣ На большинстве собеседований сложных задач не дают, особенно если это позиция условного Java-разработчика.
2️⃣ Задачи уровня Middle и выше требуют намного больше времени, которого у большинства подписчиков вечно не хватает 🤷🏻‍♂️

Если марафон зайдёт, то следующий проведём с задачами уровня Middle 😉

Итак, стартуем в 11:00 МСК 🚀🚀🚀

—-
⚠️ Рекомендую не использовать ИИ. Если такие простые задачки без него не решить, повод пройти базовый курс SQL или хотя бы посидеть на SQL-тренажёрах.
Задачки будут с ссылками на Leetcode, там можно сразу проверять решение, регистрация бесплатная.


#sql #конкурс #Denis_Kivilev
Канал Oracle Developer | Чатик 💬
Мини-курс Оптимизация: Быстрый старт 🚀
11👍2
[1] Задача № 175. Combine Two Tables

Постановка
Напиши решение, чтобы вывести имя, фамилию, город и штат каждого человека из таблицы Person. Если для personId нет адреса в таблице Address, выведи вместо него null.
Верни результирующую таблицу в любом порядке.
Формат результата приведён в следующем примере.

Источник
https://leetcode.com/problems/combine-two-tables/

#sql #конкурс #Denis_Kivilev
Канал Oracle Developer | Чатик 💬
Мини-курс Оптимизация: Быстрый старт 🚀
1
[2] Задача 511. Game Play Analysis I

Постановка
Напиши решение, чтобы найти дату первого входа для каждого игрока.
Верни результирующую таблицу в любом порядке.
Формат результата приведён в следующем примере.

Источник
https://leetcode.com/problems/game-play-analysis-i/

#sql #конкурс #Denis_Kivilev
Канал Oracle Developer | Чатик 💬
Мини-курс Оптимизация: Быстрый старт 🚀
2
[3] Задача 577. Employee Bonus

Постановка
Напиши решение, чтобы вывести имя и размер бонуса каждого сотрудника, у которого бонус меньше 1000.

Верни результирующую таблицу в любом порядке.
Формат результата приведён в следующем примере.

Источник
https://leetcode.com/problems/employee-bonus/

#sql #конкурс #Denis_Kivilev
Канал Oracle Developer | Чатик 💬
Мини-курс Оптимизация: Быстрый старт 🚀
1
[4] Задача 595. Big Countries

Постановка
Напиши решение, чтобы вывести название, население и площадь больших стран.

Страна считается большой, если:
▫️ её площадь не менее трёх миллионов (т. е. 3000000 км²), или
▫️ её население не менее двадцати пяти миллионов (т. е. 25000000).

Верни результирующую таблицу в любом порядке.

Формат результата приведён в следующем примере.

Источник
https://leetcode.com/problems/big-countries/description/

#sql #конкурс #Denis_Kivilev
Канал Oracle Developer | Чатик 💬
Мини-курс Оптимизация: Быстрый старт 🚀
1
[5] Задача 586. Customer Placing the Largest Number of Orders

Постановка
Напиши решение, чтобы найти customer_number для клиента, который сделал наибольшее количество заказов.

Тестовые данные подготовлены так, что ровно один клиент сделал больше заказов, чем любой другой.
Формат результата приведён в следующем примере.

Расширенный вариант
Что, если несколько клиентов сделали наибольшее количество заказов? Можешь ли ты найти customer_number всех таких клиентов?

Источник
https://leetcode.com/problems/customer-placing-the-largest-number-of-orders/

#sql #конкурс #Denis_Kivilev
Канал Oracle Developer | Чатик 💬
Мини-курс Оптимизация: Быстрый старт 🚀
Отправляем ваши варианты решения

Коллеги, надеюсь мини-марафон вам понравился 👌🏻

Отправить ваши ответы можно до 12:00 МСК 29 августа.

➡️Присылайте ответы сюда ⬅️

Розыгрыш проведу в пятницу 🎁

Принцип розыгрыша

С помощью рандомайзера выберем трёх счастливчиков из тех, кто прислал свои ответы:

🏆 Первое место — 3 000 руб.
🥈 Второе место — 2 000 руб.
🥉 Третье место — 1 000 руб.

На пятничную вкусняшку точно хватит 😉
Всем удачи 🍀

#sql #конкурс #Denis_Kivilev
Канал Oracle Developer | Чатик 💬
Мини-курс Оптимизация: Быстрый старт 🚀
4
Решения задач к марафону по SQL

Друзья, всем привет!
С вами Денис 🖐🏻
В среду я опубликовал пять задач уровня Easy с Leetcode.
Респектую ребятам, кто отправил свои ответы для участия в конкурсе 🤝 После этого поста ответы не принимаются.

Ниже я опубликую свои решения.

1️⃣ Задача № 175. Combine Two Tables

select firstName, lastName, city, state
from person p
left join address a on p.personId = a.personId;


2️⃣ Задача 511. Game Play Analysis I

select player_id, min(to_char(event_date, 'YYYY-MM-DD')) first_login 
from Activity
group by player_id;


3️⃣ Задача 577. Employee Bonus

select name, bonus
from employee e
left join bonus b on e.empid = b.empid
where nvl(b.bonus,0) < 1000;


4️⃣ Задача 595. Big Countries

select name, population, area
from world w
where w.area >= 3000000 or w.population >= 25000000;


5️⃣ Задача 586. Customer Placing the Largest Number of Orders

 select o1.customer_number
from orders o1
group by o1.customer_number
having count(1) = (select max(count(1))
from orders o
group by o.customer_number)

Похожая задачка на пятую была на собесе в GehtSoft. Если интересно как это было на собесе ставь 🦄 - залью видос.

На скринах показана статистика скорости выполнения запросов - этот показатель может плавать.

Подведем итоги

Конечно, на Oracle-разработчика такие легкие задачи, скорее всего, не встретятся.
Тем не менее, когда я проходил собесы на Java-разработчика, уровень SQL-задачек был именно таким. Очень много вопросов по JOINам.
Если вы решили перетечь в Java-разработку, то считайте секция с БД на собесах у вас в кармане 😊

Результат розыгрыша призов будет сегодня, следите за каналом, включите уведомления, чтоб не пропустить 🔔

#sql #конкурс #Denis_Kivilev
Канал Oracle Developer | Чатик 💬
Мини-курс Оптимизация: Быстрый старт 🚀
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🦄8👍32