ストレージ・プロシージャの実行時にORA-01031に報告する権限が不足している
1534 ワード
Oracleストレージでは、デフォルトではDMLとDQLを直接実行できますが、createやdropのようなDDLを実行するには、EXECUTE IMMEDIATEを使用する必要があります.
この文を実行すると、ORA-01031:権限が不足していることを示すプロンプトが表示されます.このユーザはDBA権限を付与している.
理由:CREATE TABLEはCREATE ANY TABLE権限を使用しようとしますが、CREATE ANY TABLE権限はDBAロールから来ています.デフォルトでは、セッション環境では表示されますが、ストレージ中は表示されません(無効).
すなわち、ORACLEのデフォルトは定義者権限であり、定義者権限はストレージ中にROLEが無効であり、明示的な権限が必要である.
--
SELECT TO_CHAR(SYSDATE, 'YYYY') INTO V_N FROM DUAL;
V_CREATESQL := 'CREATE TABLE TEXT_' || V_N ||
'_T AS SELECT * FROM TEXT';
EXECUTE IMMEDIATE V_CREATESQL;
この文を実行すると、ORA-01031:権限が不足していることを示すプロンプトが表示されます.このユーザはDBA権限を付与している.
理由:CREATE TABLEはCREATE ANY TABLE権限を使用しようとしますが、CREATE ANY TABLE権限はDBAロールから来ています.デフォルトでは、セッション環境では表示されますが、ストレージ中は表示されません(無効).
すなわち、ORACLEのデフォルトは定義者権限であり、定義者権限はストレージ中にROLEが無効であり、明示的な権限が必要である.
grant CREATE TABLE to [username];