Oracle 19C — ошибка при попытке разрешить выполнение на DBMS_LOCK

Обновление некоторых скриптов с 18 на 19, но получение этого

Также пробовали просто DBMS_LOCK вместо SYS.DBMS_LOCK

SQL> GRANT EXECUTE ON SYS.DBMS_LOCK to myuser;
GRANT EXECUTE ON SYS.DBMS_LOCK to myuser
                     *
ERROR at line 1:
ORA-04042: procedure, function, package, or package body does not exist

sqlplus sys/ChangeMe123! КАК SYSDBA

Примечание - другие гранты сработали

SQL> GRANT ALTER SESSION TO myuser;

Гранту удалось.

SQL> GRANT CREATE PROCEDURE TO myuser;

Гранту удалось.

SQL> GRANT CREATE SEQUENCE TO myuser;

Гранту удалось.

SQL> GRANT CREATE SESSION TO myuser;

Гранту удалось.

SQL> GRANT CREATE MATERIALIZED VIEW TO myuser;

Гранту удалось.

SQL> GRANT CREATE TABLE TO myuser;

Гранту удалось.

SQL> GRANT CREATE TRIGGER TO myuser;

Гранту удалось.

SQL> GRANT CREATE VIEW TO myuser;

Гранту удалось.

SQL> GRANT CREATE ЛЮБОЙ СИНОНИМ ДЛЯ myuser;

Гранту удалось.

SQL> GRANT DROP ЛЮБОЙ СИНОНИМ TO myuser;

Гранту удалось.

SQL> GRANT SELECT ЛЮБОЙ СЛОВАРЬ ДЛЯ myuser;

Гранту удалось.

SQL> GRANT EXECUTE ON DBMS_LOCK для myuser; GRANT EXECUTE ON DBMS_LOCK для myuser


person SRJ    schedule 04.10.2020    source источник
comment
К какому пользователю вы подключены, пытаясь предоставить эту привилегию?   -  person Littlefoot    schedule 04.10.2020
comment
sqlplus sys/ChangeMe123! КАК SYSDBA   -  person SRJ    schedule 04.10.2020
comment
SYS владеет базой данных. Роль DBA предоставляется при установке базы данных. Итак, если SYS не может предоставить эту привилегию... хм. Я полагаю, никто не изменил эту роль, не так ли? Почему они? В любом случае: что именно вам нужно от пакета DBMS_LOCK? Это процедура СНА? Если это так, Oracle 19c использует DBMS_SESSION.SLEEP. Посмотрим, сможешь ли тыgrant execute on dbms_session to myuser. Да, вам придется изменить код везде, где вы используете эту процедуру, но давайте сначала попробуем предоставить привилегию и посмотрим, работает ли она.   -  person Littlefoot    schedule 04.10.2020
comment
Спасибо! Мне нужно будет уточнить у автора оригинала намерения.   -  person SRJ    schedule 04.10.2020


Ответы (1)


DBMS_LOCK.SLEEP устарел, заменен на DBMS_SESSION.SLEEP, но все еще доступен в 19c для обратной совместимости. Проверьте, существует ли объект

SQL> select object_name,object_type,owner from dba_objects
  2  where object_name='DBMS_LOCK';

OBJECT_NAME                    OBJECT_TYPE             OWNER
------------------------------ ----------------------- ------------------------------
DBMS_LOCK                      PACKAGE                 SYS
DBMS_LOCK                      PACKAGE BODY            SYS
DBMS_LOCK                      SYNONYM                 PUBLIC

Если приведенный выше запрос ничего не возвращает, запустите сценарий dbmslock как sysdba, который создает указанный выше пакет.

sql>@?/rdbms/admin/dbmslock

person Suresh    schedule 04.10.2020