【问题标题】:Oracle pl sql new user gets PROCEDURE DOESN'T EXISTOracle pl sql 新用户获取程序不存在
【发布时间】:2014-11-07 12:30:48
【问题描述】:

我有一个基于 Oracle 的应用程序,它有一个数据库和 apache,并将 modplsql 设置为应用程序服务器,我对 Oracle 相当陌生,所以如果这不是一个非常聪明的问题,请原谅我,但这是一个我找不到答案的问题.

问题是我需要向这个 oracle 应用程序添加几个新用户,但不知道怎么做,我尝试了两种方法:使用控制台创建它们和使用 oracle sql 开发人员 UI 工具,在这两种情况下我授予当前用户拥有的所有角色和权限,但是当我使用新凭据连接到我的应用程序时,我收到 PROCEDURE DOESN'T EXIST 错误。我知道问题出在角色或特权上,但不知道是什么。

有更多经验的人可以指导我正确的方向吗?

提前致谢!

代码:

1) create user myuser identified by pass2;
2) ALTER USER "myuser" DEFAULT TABLESPACE "USERS" TEMPORARY TABLESPACE "TEMP" ACCOUNT UNLOCK ;
3) GRANT "DBA","CONNECT","our_USER","RESOURCE" TO "myuser";
4) GRANT create database link  TO "myuser";
   GRANT create materialized view  TO "myuser";
   GRANT create procedure  TO "myuser";
   GRANT create public synonym  TO "myuser";
   GRANT create role  TO "myuser";
   GRANT create sequence  TO "myuser";
   GRANT create synonym  TO "myuser";
   GRANT create table  TO "myuser";
   GRANT create trigger  TO "myuser";
   GRANT create type  TO "myuser";
   GRANT create view  TO "myuser";
   GRANT create tablespace  TO "myuser";
   GRANT create session  TO "myuser";

【问题讨论】:

  • 导致错误的程序存储在哪里?如果是这种情况,那么您应该通过 schema_name.procedure_name 引用它
  • 这是导致问题的应用程序运行的主要过程。
  • 如果过程不存在,则它不存在,或者用户没有此过程的特权。 “将 owner_shema.proc_name 授予用户执行;”应该有帮助。但是,如果您的数据库中有一些特殊的角色模型,最好向创建此模型的人解决问题。
  • 1) 程序确实存在。 2)我们架构中的所有用户都被授予一个具有所有权限的角色,但是当我创建一个新用户并将该角色授予他们时,我仍然得到过程不存在错误。我很确定我错过了一些东西,但是不知道是什么。希望那里有人能给出答案,如果没有,我将不得不找到一种方法来联系创建这个系统的人。无论如何,谢谢你们的回答。

标签: oracle plsql database-administration


【解决方案1】:

要在 oracle 中创建新用户,您可以通过以下语句来完成: 创建由 (Pass_word) 标识的用户 (User_name) 用户上的帐户(锁定/解锁)Qouta(user_space); 示例:

create user Muwaffaq identified by PassWo
Account unlock quota 15m on users;

创建用户后,您最授予他权限 创建会话,创建表,创建触发器......等 示例:

grant Create session to Muwaffaq;
grant Create user to Muwaffaq;
grant Create table to Muwaffaq;
grant Create Trigger to Muwaffaq;
grant Alter User to Muwaffaq;
grant Create Function to Muwaffaq;
grant Create sequnce to Muwaffaq;
grant Create procedure to Muwaffaq;

.....等等

允许您连接到您的用户的最重要的权限是创建会话 你必须把它交给每个已创建的用户。

【讨论】:

  • 非常感谢您的回答 Muwaffaq!请看我上面的问题,我添加了用于创建这个新用户的代码。
【解决方案2】:

首先,当您在 Oracle 中创建用户时 更好地充分创造并为存储提供空间 示例:

Create user "Myuser" identified by pass2
quota 15M on users Account unlock;

比创建,然后对结构做修改 ِ并且您正在创建新用户的用户必须拥有完整的完整权限,并有可能授予其他用户 然后你像这个例子一样给他们权限:

GRANT DBA,CONNECT,RESOURCE TO myuser;
GRANT create database link  TO myuser;
GRANT create materialized view  TO myuser;
GRANT create procedure  TO myuser;
GRANT create public synonym  TO myuser;
GRANT create role  TO myuser;
GRANT create sequence  TO myuser;
GRANT create synonym  TO myuser;
GRANT create table  TO myuser;
GRANT create trigger  TO myuser;
GRANT create type  TO myuser;
GRANT create view  TO myuser;
GRANT create tablespace  TO myuser;
GRANT create session  TO myuser;

等等……

【讨论】:

    【解决方案3】:

    我知道它已经有一段时间了,但我注意到有几个人看过这篇文章,所以我决定发布问题所在,希望它可以帮助某人。好吧,在我们的例子中,这是模式的问题,因此需要一个触发器,所以:

    create or replace TRIGGER my_user.swithtomyschema
    AFTER LOGON ON my_user.SCHEMA 
    BEGIN
      EXECUTE IMMEDIATE 'ALTER SESSION SET CURRENT_SCHEMA=my_schema';
    END;
    

    我现在知道了,所以它看起来很简单,但那时我是系统的新手,我花了好几天才弄清楚它出了什么问题。我希望没有其他人处于同样的情况,但如果你是,我希望你会遇到这个答案,它会为你指明正确的方向。祝你好运!

    感谢所有试图提供帮助的人!

    【讨论】:

      猜你喜欢
      • 2017-04-13
      • 1970-01-01
      • 2015-06-09
      • 2021-08-01
      • 2017-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多