Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.

Ошибка ORA-01031: insufficient privileges в Oracle DB — настройка прав

Обновлено: 26.08.2026  ·  Официальная база знаний
  • Ошибка ORA-01031: insufficient privileges при выполнении DDL/DML операций, создании пакетов или процедур.
  • Невозможность подключиться локально под учетной записью sysdba (sqlplus / as sysdba).
  • Сбой выполнения административных команд (ALTER SYSTEM, GRANT, CREATE USER).

1. Проверка прямых системных привилегий и ролей пользователя

-- Проверка системных привилегий
SELECT * FROM dba_sys_privs WHERE grantee = 'APP_USER';

-- Проверка назначенных ролей
SELECT * FROM dba_role_privs WHERE grantee = 'APP_USER';

-- Проверка объектных прав на таблицы
SELECT * FROM dba_tab_privs WHERE grantee = 'APP_USER';

2. Выдача необходимых системных прав

-- Разрешение создания сессий и таблиц
GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW TO APP_USER;

-- Выдача прав на выполнение пакета
GRANT EXECUTE ON DBMS_LOCK TO APP_USER;

3. Решение сбоя 'sqlplus / as sysdba' на уровне Linux

Если ORA-01031 возникает при локальном входе без пароля через сокет ОС, убедитесь, что пользователь ОС входит в группу dba:

# Проверка групп текущего пользователя Linux
id

# Добавление пользователя в группу dba
usermod -aG dba oracle

4. Проверка файла паролей (Password File) для удаленного SYSDBA

-- Проверка пользователей с административными привилегиями
SELECT * FROM v$pwfile_users;

Если файл паролей поврежден, пересоздайте его утилитой orapwd:

orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=MySysPassword entries=10 force=y
Практический опыт инженера: Не раздавайте роль `DBA` прикладным сервисам для устранения ORA-01031. Используйте принцип наименьших привилегий (Principle of Least Privilege), создавая изолированные роли с точечными `GRANT` на конкретные объекты.

Частые вопросы (FAQ)

Почему ORA-01031 возникает при создании представления (CREATE VIEW), хотя на таблицу есть SELECT?

Для создания VIEW требуется прямая системная привилегия CREATE VIEW, а также прямые (не через роли) права SELECT на все таблицы, участвующие в представлении.

Что такое опция WITH ADMIN OPTION / WITH GRANT OPTION?

Опция WITH GRANT OPTION позволяет пользователю передавать полученные объектные права другим схемам. Без этой опции попытка передать права вызовет ORA-01031.

Влияет ли параметр REMOTE_LOGIN_PASSWORDFILE на ORA-01031?

Да. Если remote_login_passwordfile установлен в NONE, подключение под SYSDBA по сети невозможно и будет отклоняться с ORA-01031. Значение должно быть EXCLUSIVE.

Почему триггер падает с ORA-01031 при вызове динамического SQL (EXECUTE IMMEDIATE)?

Динамический SQL внутри хранимого кода выполняется с прямыми правами владельца схемы. Роли, назначенные владельцу, игнорируются.