当前位置:网站首页>Insufficient permissions

Insufficient permissions

2022-07-07 21:04:00 Full stack programmer webmaster

Hello everyone , I meet you again , I'm the king of the whole stack .

For example, the following stored procedure is dba Create a tablespace 、 Create a user and grant permissions to this user :

create or replace procedure createTS(tname in varchar2)

is PRAGMA AUTONOMOUS_TRANSACTION; v_createsql varchar2(400); vtbsname varchar2(40); begin vtbsname := tname; v_createsql:=’CREATE TABLESPACE ‘|| vtbsname ||’ DATAFILE ”F:\APP\ADMINISTRATOR\ORADATA\’|| vtbsname ||’.dbf” SIZE 30M AUTOEXTEND ON NEXT 10M’; Dbms_Output.Put_Line(v_createsql); execute immediate v_createsql; v_createsql:=’CREATE USER ‘|| vtbsname ||’ identified by ‘|| vtbsname ||’ default tablespace ‘||vtbsname; Dbms_Output.Put_Line(v_createsql); execute immediate v_createsql; — v_createsql:=’grant ALTER SESSION,CREATE CLUSTER,CREATE DATABASE LINK,CREATE SEQUENCE,CREATE SESSION ,CREATE SYNONYM,CREATE VIEW to ‘|| vtbsname; — v_createsql:=’GRANT CREATE SESSION,CREATE CLUSTER,CREATE INDEXTYPE,CREATE OPERATOR,CREATE PROCEDURE,CREATE SEQUENCE,CREATE TABLE,CREATE TRIGGER,CREATE TYPE,INSERT ANY TABLE,UPDATE ANY TABLE,SELECT ANY TABLE,DELETE ANY TABLE to ‘|| vtbsname; v_createsql:=’GRANT connect,resource to ‘|| vtbsname; Dbms_Output.Put_Line(v_createsql); execute immediate v_createsql;

end createTS;

PROCEDURE CREATETS The compiled

Compile and pass , For example, the following operation

set serveroutput on; execute createTS(‘nk_develop14061342’);

In line 28 Error starting running command on : execute createTS(‘nk_develop14061343’) Error reporting : ORA-01031: Insufficient authority ORA-06512: stay “NK_DEVELOP131021.CREATETS”, line 22 ORA-06512: stay line 1 01031. 00000 – “insufficient privileges” *Cause: An attempt was made to change the current username or password without the appropriate privilege. This error also occurs if attempting to install a database without the necessary operating system privileges. When Trusted Oracle is configure in DBMS MAC, this error may occur if the user was granted the necessary privilege at a higher label than the current login. *Action: Ask the database administrator to perform the operation or grant the required privileges. For Trusted Oracle users getting this error although granted the the appropriate privilege at a higher label, ask the database administrator to regrant the privilege at the appropriate label. CREATE TABLESPACE nk_develop14061343 DATAFILE ‘F:\APP\ADMINISTRATOR\ORADATA\nk_develop14061343.dbf’ SIZE 30M AUTOEXTEND ON NEXT 10M CREATE USER nk_develop14061343 identified by nk_develop14061343 default tablespace nk_develop14061343 GRANT connect,resource to nk_develop14061343

The reason is that the permission is insufficient when running to grant permission

Find a post such as the following :http://bbs.csdn.net/topics/360053754

Finally found the problem , It turns out that I have no permission . Although the current user has permission to run statements , However, it is necessary to explicitly assign permissions to the current user in the stored procedure . The following is the information I found , Post it for everyone to see . ===================== 【IT168 Technical documentation 】 We know , User owned role Permissions are not available in stored procedures . Such as :

SQL> select * from dba_role_privs where grantee=’SUK’;

GRANTEE GRANTED_ROLE ADMIN_OPTION DEFAULT_ROLE ———— ———— ———— ———— SUK DBA NO YES SUK CONNECT NO YES SUK RESOURCE NO YES

– user SUK Have DBA This role – Create another test stored procedure : create or replace procedure p_create_table is begin Execute Immediate ‘create table create_table(id int)’; end p_create_table;

– Then test SQL> exec p_create_table;

begin p_create_table; end;

ORA-01031: Insufficient authority ORA-06512: stay ”SUK.P_CREATE_TABLE”, line 3 ORA-06512: stay line 1

– Be able to see . Even if you have DBA role. You can't create a table .role Not available in stored procedures .

– In this case , We generally need to explicitly perform system permissions . Such as grant create table to suk; – But this method is too troublesome , Sometimes it may take a lot of authorization to run stored procedures – actually ,oracle Provides us with the ability to use in stored procedures role The method of authority : – Change stored procedures , increase Authid Current_User When stored procedures can use role jurisdiction . create or replace procedure p_create_table Authid Current_User is begin Execute Immediate ‘create table create_table(id int)’; end p_create_table;

– Try running again : SQL> exec p_create_table;

PL/SQL procedure successfully completed

– It has been able to run .

original Is to use caller permissions

Therefore, when creating stored procedures, you need to add Authid Current_User The permissions of the current user

create or replace procedure createTS(tname in varchar2) Authid Current_User is

To dynamically create table spaces in stored procedures, for example, the following steps . 1、 Need to adopt Oracle Autonomous affairs .

Add in the stored procedure PRAGMA AUTONOMOUS_TRANSACTION; Clause 2、 You need to display the permissions of the sub configuration to create the tablespace , Otherwise, the prompt authority is insufficient . grant alter tablespace to TEST; grant create tablespace to TEST;

Thank the website owner

http://www.dbfaq.net/FAQ/FixupQL.aspx?QuestionID=112

http://bbs.csdn.net/topics/360053754

Publisher : Full stack programmer stack length , Reprint please indicate the source :https://javaforall.cn/116452.html Link to the original text :https://javaforall.cn

原网站

版权声明
本文为[Full stack programmer webmaster]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/188/202207071843026481.html