create view
しかありません ユーザーに直接付与されます。表示される他のシステム権限はロールからのものであり、ロールはdefiner's-rightsストアドプロシージャで無効になっています
。 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
が表示されるようになりました 直接付与されましたが、以前は付与されていませんでした。
ただし、スキーマは明確に定義され、安定している必要があるため、オブジェクトを動的に作成することはほとんどありません。このタイプの変更は制御され、リリースプロセスの一部である必要があります。ただし、演習として、直接助成金が必要です。