当前位置: 首页 > 知识库问答 >
问题:

oracle,正在尝试创建创建用户的过程

司马宏茂
2023-03-14

我试着创建这个过程(作为一个系统),它需要两个参数,用户名和密码,并根据它们创建一个用户:

create or replace procedure procedure_create_client 
( user_name IN varchar2 , u_password IN varchar2 )  IS

tmp_query varchar(150);
user_name_upper varchar(30) := UPPER(user_name) ;

BEGIN

    tmp_query := 'create user C##' || user_name_upper || ' identified by ' || u_password ;
    EXECUTE IMMEDIATE ( tmp_query );

    tmp_query := 'grant create session to ' || user_name_upper ;
    EXECUTE IMMEDIATE ( tmp_query );

END ;

问题是,当我尝试执行此过程(作为一个系统)时,我遇到了以下错误:

错误报告:ORA-01031:权限不足ORA-06512:在第9行的“系统.过程\u创建\u客户端”处ORA-06512:在第1 01031行。00000-“权限不足”*原因:试图在没有适当权限的情况下更改当前用户名或密码。如果试图在没有必要的操作系统权限的情况下安装数据库,也会发生此错误。在DBMS MAC中配置Trusted Oracle时,如果用户在高于当前登录名的标签上被授予必要的权限,则可能会发生此错误*操作:要求数据库管理员执行操作或授予所需的权限。对于获得此错误的受信任Oracle用户,尽管在较高的标签上授予了相应的权限,但请要求数据库管理员在相应的标签上重新授予该权限。

共有3个答案

穆毅然
2023-03-14

缺少的特权很可能是您通过角色授予的。在PL/SQL块中,您只有直接应用的特权。您必须使用将创建用户授予…。授予角色(例如,将DBA授予…在程序内部无效。

柴增
2023-03-14

该错误告诉您,您打算运行脚本的用户无权更改当前用户的用户名和密码。如果当前用户的用户名被传递给过程,那么问题是您没有被授予更改自己的用户名或密码的必要特权。如果您尝试创建另一个用户,那么错误消息似乎是错误的,但您仍然有特权问题。您需要查看您的特权,并对照创建用户所需的特权进行检查。

敖硕
2023-03-14

考虑避免除数据库维护以外的任务的系统和系统;也许您更愿意创建自己的用户,让我们称之为MYDBA并授予它DBA角色。

我在下面的例子中就是这样做的:我创建了一个新用户SCOTT,并只授予它创建其他用户的权限。授予CREATE SESSION具有附加的ADMIN选项,否则SCOTT将无法将CREATE SESSION授予它通过过程创建的用户。

SQL> show user
USER is "SYS"
SQL> create user scott identified by tiger quota unlimited on users;

User created.

SQL> grant create session to scott with admin option;

Grant succeeded.

SQL> grant create procedure to scott;

Grant succeeded.

SQL> grant create user to scott;

Grant succeeded.

SQL>

现在,作为新创建的SCOTT用户连接,创建一个过程(复制/粘贴代码,在第10行中添加“C”),并执行该过程以创建另一个用户MIKE:

SQL> connect scott/tiger@xe
Connected.
SQL>
SQL> create or replace procedure procedure_create_client
  2    (user_name IN varchar2 , u_password IN varchar2 )
  3  IS
  4    tmp_query varchar(150);
  5    user_name_upper varchar(30) := UPPER(user_name) ;
  6  BEGIN
  7    tmp_query := 'create user C##' || user_name_upper || ' identified by ' || u_password;
  8    EXECUTE IMMEDIATE ( tmp_query );
  9
 10    tmp_query := 'grant create session to C##' || user_name_upper ;
 11    EXECUTE IMMEDIATE ( tmp_query );
 12  END;
 13  /

Procedure created.

SQL>
SQL> exec procedure_create_client('mike', 'lion');

PL/SQL procedure successfully completed.

SQL>

好的;C##似乎被创建了。让我们连接:

SQL> connect c##mike/lion@xe
Connected.
SQL>

看起来不错,不是吗?尽管可怜的C##mike除了创建会话之外没有任何特权,但这正是您计划的。

 类似资料:
  • 问题内容: 我正在使用SQL Server开发C#应用程序,并想调用存储过程来创建登录名和用户。 我正在寻找最简单的方法来做到这一点,只是默认的东西,但有用户名和密码。 登录旁边的创建用红色下划线标出? 但是我认为我的登录很好吗?请告诉我我是否缺少任何东西。 与创建用户一起,是否只是这样的一个班轮? 我不明白,并… 我可以做这样的事情: Google如何搜索以下来源: http://ss64.co

  • 为什么它不起作用?我在甲骨文中运行这个。我想创建这样的装饰: 这是错误: PLS-00103:在预期以下情况之一时遇到符号“DECLARE”:begin函数杂注过程子类型当前游标删除存在于外部语言之前符号“begin”被替换为“DECLATE”以继续。7/5 PLS-00103:在预期以下情况之一时遇到符号“文件结束”:(开始情况声明结束异常退出,如果循环mod null pragma引发返回选择

  • 如何使用rdsadmin中的select在Oracle中创建过程? 环境:Oracle数据库11g 11.2.0.4.0 AWS RDS SQL查询

  • 我想在oracle 12c中创建一个用户,但我遇到了一个问题。输入用户名和psw后,将显示以下警告:ORA-65096:无效的公用用户名或角色名

  • 我创建了一个将被转换为web服务方法,该方法如下所示: 当我部署和测试此web服务时,我得到以下错误: WS00041:服务调用引发异常,消息为:NULL;有关更多详细信息,请参阅服务器日志异常详细信息:java.lang.reflect.invocationtargetexception javax.servlet.servletexception:java.lang.reflect.invoc