Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

तालिका अनुदान बनाने के साथ भी तत्काल निष्पादित करें विफल रहता है

आपके पास केवल create view . है सीधे आपके उपयोगकर्ता को प्रदान किया गया। आप देख सकते हैं कि अन्य सिस्टम विशेषाधिकार एक भूमिका से आ रहे हैं, और . user_role_privs में देखें यह देखने के लिए कि आपको कितनी भूमिकाएँ दी गई हैं, और आप देख सकते हैं कि प्रत्येक भूमिका आपको कौन-से विशेषाधिकार देती है role_sys_privs में (अनुदानकर्ता के रूप में भूमिका के नाम के साथ)। भूमिकाओं की कई परतें भी हो सकती हैं।

यदि आपने set role none . किया तो आपको वही त्रुटि दिखाई देगी स्थिर रूप से तालिका बनाने का प्रयास करने से पहले। न्यूनतम सेट-अप के साथ डेमो:

create role myrole;
grant create session, create table, create procedure to myrole;
create user myuser identified by mypasswd;
grant myrole to myuser;
grant create view, unlimited tablespace to myuser;

फिर उस उपयोगकर्ता के रूप में:

SQL> connect myuser/mypasswd
Connected.
SQL> select * from user_sys_privs;

USERNAME                       PRIVILEGE                                ADM
------------------------------ ---------------------------------------- ---
MYUSER                         UNLIMITED TABLESPACE                     NO
MYUSER                         CREATE VIEW                              NO

2 rows selected.

SQL> select * from session_privs;

PRIVILEGE
----------------------------------------
CREATE SESSION
UNLIMITED TABLESPACE
CREATE TABLE
CREATE VIEW
CREATE PROCEDURE

5 rows selected.

SQL> Create table Dummy99_99 (Dummy_Field number);

Table created.

SQL> drop table Dummy99_99 purge;

Table dropped.

SQL> set role none;

Role set.

SQL> Create table Dummy99_99 (Dummy_Field number);
Create table Dummy99_99 (Dummy_Field number)
*
ERROR at line 1:
ORA-01031: insufficient privileges

और आपके संग्रहीत कार्यविधि संस्करण के साथ:

SQL> connect myuser/mypasswd
Connected.
SQL> create or replace procedure sp_dummy
  2  as
  3  begin
  4    execute immediate 'Create table Dummy99_99 (Dummy_Field number)';
  5  end sp_dummy;
  6  /

Procedure created.

SQL> exec sp_dummy;
BEGIN sp_dummy; END;

*
ERROR at line 1:
ORA-01031: insufficient privileges
ORA-06512: at "MYUSER.SP_DUMMY", line 4
ORA-06512: at line 1

किसी संग्रहीत कार्यविधि से तालिका को गतिशील रूप से बनाने में सक्षम होने के लिए, आपके DBA को create table अनुदान देना होगा सीधे आपके उपयोगकर्ता के लिए:

grant create table to myuser;

फिर प्रक्रिया को फिर से आजमा रहे हैं:

SQL> connect myuser/mypasswd
Connected.
SQL> select * from user_sys_privs;

USERNAME                       PRIVILEGE                                ADM
------------------------------ ---------------------------------------- ---
MYUSER                         UNLIMITED TABLESPACE                     NO
MYUSER                         CREATE TABLE                             NO
MYUSER                         CREATE VIEW                              NO

SQL> exec sp_dummy;

PL/SQL procedure successfully completed.

SQL> desc Dummy99_99
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 DUMMY_FIELD                                        NUMBER

ध्यान दें कि user_sys_privs अब दिखाता है कि create table सीधे प्रदान किया गया है, जो उसने पहले या प्रश्न में नहीं दिया था।

हालांकि, यह बहुत कम संभावना है कि आप वास्तव में वस्तुओं को गतिशील रूप से बनाना चाहेंगे, क्योंकि स्कीमा को अच्छी तरह से परिभाषित और स्थिर होना चाहिए - इस प्रकार के परिवर्तनों को नियंत्रित किया जाना चाहिए और रिलीज प्रक्रिया का हिस्सा होना चाहिए। लेकिन एक अभ्यास के रूप में, आपको प्रत्यक्ष अनुदान की आवश्यकता होती है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. गुम आर्टिफैक्ट com.oracle:ojdbc6:jar:11.2.0.3

  2. क्यों VARCHAR2 द्वारा अनुक्रमित एक सहयोगी सरणी 9 से अधिक तत्वों को संग्रहीत नहीं करती है

  3. Oracle में आज की तारीख को एक चर में कैसे लौटाएं?

  4. नई लाइन के आधार पर स्प्लिट CLOB कॉलम - Oracle SQL

  5. पीएलएसक्यूएल जेडीबीसी:अंतिम पंक्ति आईडी कैसे प्राप्त करें?