USER в Oracle SQL — как определить текущего пользователя

🟢 USER в Oracle SQL. Введение

USER — это встроенная функция в Oracle SQL, которая возвращает имя текущего пользователя, подключившегося к базе данных. Это строковое значение (VARCHAR2) и полезно для:

  • Аудита

  • Безопасности

  • Отладки

  • Условных выражений в PL/SQL

Функция USER часто используется вместе с SYS_CONTEXT, UID, SESSION_USER и CURRENT_USER.


🔤 Написание

sql
SELECT USER FROM dual;

🔄 Где используется

  • Определение, кто выполняет запрос

  • Контроль логики на уровне PL/SQL

  • В логировании действий пользователей

  • Создание триггеров, привязанных к пользователям

  • Создание синонимов и представлений, зависящих от пользователя


🧪 10 Примеров использования USER

1️⃣ Получение имени текущего пользователя

sql
SELECT USER FROM dual;
-- Пример результата: 'HR'

2️⃣ Условное выполнение кода в зависимости от пользователя

plsql
BEGIN
IF USER = 'ADMIN' THEN
DBMS_OUTPUT.PUT_LINE('Добро пожаловать, администратор!');
ELSE
DBMS_OUTPUT.PUT_LINE('Доступ ограничен.');
END IF;
END;

3️⃣ Логирование действий

sql
INSERT INTO audit_log (username, action_time)
VALUES (USER, SYSTIMESTAMP);

4️⃣ Автоматическое заполнение поля в триггере

plsql
CREATE OR REPLACE TRIGGER trg_insert_user
BEFORE INSERT ON orders
FOR EACH ROW
BEGIN
:NEW.created_by := USER;
END;

5️⃣ Сравнение с SYS_CONTEXT

sql
SELECT USER, SYS_CONTEXT('USERENV', 'SESSION_USER'), SYS_CONTEXT('USERENV', 'CURRENT_USER')
FROM dual;

6️⃣ Проверка владельца объектов

sql
SELECT table_name
FROM all_tables
WHERE owner = USER;

7️⃣ Фильтрация по текущему пользователю

sql
SELECT * FROM user_settings
WHERE username = USER;

8️⃣ Применение в представлении

sql
CREATE OR REPLACE VIEW my_data AS
SELECT * FROM full_data
WHERE owner = USER;

9️⃣ Определение прав пользователя

sql
SELECT * FROM session_privs
WHERE grantee = USER;

🔟 Сравнение с CURRENT_USER и SESSION_USER

ФункцияЧто возвращает
USERИмя пользователя, под которым выполнен SQL
SESSION_USERКто вошёл в сессию
CURRENT_USERКто исполняет PL/SQL в данный момент

🧩 USER в Oracle SQL. Заключение

USER — это простая, но важная функция для идентификации текущего пользователя в Oracle SQL. Она помогает контролировать поведение, вести логирование, ограничивать доступ и строить динамическую бизнес-логику.

💡 Запомни:

  • Возвращает VARCHAR2 с именем пользователя

  • Используется в SELECT, PL/SQL, триггерах

  • Отличается от SESSION_USER и CURRENT_USER — полезно знать все три

  • Безопасна и удобна для отладки


🔜 Следующая статья:

UNIQUE в Oracle SQL — как задать уникальность


 

Понравилась статья? Поделиться с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии