ORACLE - процедура создания предоставлена, но не может создать процедуру
В базе данных есть пользователь, которому предоставлена привилегия CREATE PROCEDURE. Но когда этот пользователь пытается создать простую процедуру, появляется следующая ошибка: ORA-01031: недостаточные привилегии 01031. 00000 - "недостаточные привилегии" * Причина: была предпринята попытка изменить текущее имя пользователя или пароль без соответствующей привилегии. Эта ошибка также возникает при попытке установить базу данных без необходимых прав операционной системы.
вот DDL для процедуры:
CREATE OR REPLACE PROCEDURE TOTALBASE.ROUNDUP
(CUR OUT SYS_REFCURSOR )
AS
BEGIN
OPEN CUR FOR
SELECT * FROM TOTALBASE.ABONENT;
END ROUNDUP;
Что еще я должен рассмотреть, чтобы сделать эту работу? Я подозреваю, что даже если привилегия предоставлена любому, кто не входит в группу администраторов или группу ORA_DBA, не может создать процедуру. но я не уверен.
2 ответа
Чтобы создать процедуру в схеме, отличной от вашей, вам понадобится привилегия "CREATE ANY PROCEDURE".
Как правило, эта привилегия не должна предоставляться незначительно, поскольку ее можно легко использовать для обхода безопасности базы данных.
Надеюсь, это поможет.
После нескольких комментариев ниже, я пытаюсь снова.
Не создавайте процедуру в другой схеме; разрешить каждому пользователю создавать объекты только в своей схеме.
Таким образом, у вас меньше причин для GRANT
доступ к другим объектам схемы. TOTALBASE
Пользователь может, чем предоставить EXECUTE
привилегия на эту процедуру для текущего пользователя.
Текущий пользователь, которому нужны данные из TOTALUSER
таблица, не нужно создавать или получать доступ к другим объектам, когда он имеет EXECUTE
привилегия на функцию или процедуру.
Если смотреть под другим углом, так же легче поддерживать: TOTALUSER
предоставляет своего рода API в том, как он предоставляет данные текущему пользователю, скрывая детали реализации, которые могут измениться в будущем, будучи прозрачным для текущего пользователя.