我试着创建这个过程(作为一个系统),它需要两个参数,用户名和密码,并根据它们创建一个用户:
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用户,尽管在较高的标签上授予了相应的权限,但请要求数据库管理员在相应的标签上重新授予该权限。
缺少的特权很可能是您通过角色授予的。在PL/SQL块中,您只有直接应用的特权。您必须使用将创建用户授予…
。授予角色(例如,将DBA授予…
在程序内部无效。
该错误告诉您,您打算运行脚本的用户无权更改当前用户的用户名和密码。如果当前用户的用户名被传递给过程,那么问题是您没有被授予更改自己的用户名或密码的必要特权。如果您尝试创建另一个用户,那么错误消息似乎是错误的,但您仍然有特权问题。您需要查看您的特权,并对照创建用户所需的特权进行检查。
考虑避免除数据库维护以外的任务的系统和系统;也许您更愿意创建自己的用户,让我们称之为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