In 11.2.0.2
Having seen in the previous post, "EXECUTE Privilege on DBMS_SPM not sufficient", let's see if there is a risk to the ADMINISTER SQL MANAGEMENT OBJECT privilege.
First, recreating the SQL Plan
Next, setup the BREAK !
I was able to use the SPM_BREAK account to *DROP* an SQL Plan Baseline that was created by the SPM_TEST account without identifying which account it belonged to -- i.e. which account was the creator ! See Oracle Support Doc 1469099.1 and reference to Bug 12932784. Isn't that a bug, or a security loophole ?
Apparently, this privilege is to be used only by Administrators. But a non-Administrator cannot manage and evolve his own SQL Plan Baselines without this privilege. So does that mean that only an Administrator should capture, evolve and manage SQL Plan Baselines ?
If you have a shared environment with different development teams developing different applications in different schemas, how do you provide them the facility to manage their own SQL Plan Baselines ? The EXECUTE privilege on DBMS_SPM is not sufficient. Yet, the ADMINISTER SQL MANAGEMENT OBJECT is excessive as one development team could drop the SQL Plan Baselines of another development team (i.e. another application).
Can anyone test that the ADMINISTER SQL MANAGEMENT privilege is required in addition to the EXECUTE on DBMS_SPM in order to simply manage / evolve one's own SQL Plans in 11.2.0.4 / 12.1.0.1 / 12.1.0.2 ?
.
.
.
Having seen in the previous post, "EXECUTE Privilege on DBMS_SPM not sufficient", let's see if there is a risk to the ADMINISTER SQL MANAGEMENT OBJECT privilege.
First, recreating the SQL Plan
SQL> connect spm_test/spm_test Connected. SQL> alter session set OPTIMIZER_CAPTURE_SQL_PLAN_BASELINES=TRUE; Session altered. SQL> variable qrn number ; SQL> exec :qrn := 5; PL/SQL procedure successfully completed. SQL> select * from spm_test_table where id_column=:qrn; 5 ID_COLUMN DATA_COL ---------- --------------- 5 5 SQL>select * from spm_test_table where id_column=:qrn; ID_COLUMN DATA_COL ---------- --------------- 5 5 SQL> alter session set OPTIMIZER_CAPTURE_SQL_PLAN_BASELINES=FALSE; Session altered. SQL> SQL> connect hemant/hemant Connected. SQL> select sql_handle, plan_name, sql_text, enabled, accepted, fixed 2 from dba_sql_plan_baselines 3 where creator='SPM_TEST' 4 / SQL_HANDLE PLAN_NAME ------------------------------ ------------------------------ SQL_TEXT -------------------------------------------------------------------------------- ENA ACC FIX --- --- --- SQL_6ceee9b24e9fd50a SQL_PLAN_6tvr9q979zp8a1e198e55 select * from spm_test_table where id_column=:qrn YES YES NO SQL>
Next, setup the BREAK !
SQL> create user spm_break identified by spm_break; User created. SQL> grant create session, administer sql management object to spm_break; Grant succeeded. SQL> connect spm_break; Enter password: Connected. SQL> SQL> set serveroutput on SQL> declare 2 ret_value pls_integer; 3 begin 4 ret_value := dbms_spm.drop_sql_plan_baseline( 5 sql_handle=>'SQL_6ceee9b24e9fd50a',plan_name=>'SQL_PLAN_6tvr9q979zp8a1e198e55'); 6 dbms_output.put_line('Return : ' || ret_value); 7 end; 8 / Return : 1 PL/SQL procedure successfully completed. SQL> SQL> connect hemant/hemant Connected. SQL> select sql_handle, plan_name, sql_text, enabled, accepted, fixed 2 from dba_sql_plan_baselines 3 where creator = 'SPM_TEST' 4 / no rows selected SQL>
I was able to use the SPM_BREAK account to *DROP* an SQL Plan Baseline that was created by the SPM_TEST account without identifying which account it belonged to -- i.e. which account was the creator ! See Oracle Support Doc 1469099.1 and reference to Bug 12932784.
Apparently, this privilege is to be used only by Administrators. But a non-Administrator cannot manage and evolve his own SQL Plan Baselines without this privilege. So does that mean that only an Administrator should capture, evolve and manage SQL Plan Baselines ?
If you have a shared environment with different development teams developing different applications in different schemas, how do you provide them the facility to manage their own SQL Plan Baselines ? The EXECUTE privilege on DBMS_SPM is not sufficient. Yet, the ADMINISTER SQL MANAGEMENT OBJECT is excessive as one development team could drop the SQL Plan Baselines of another development team (i.e. another application).
Can anyone test that the ADMINISTER SQL MANAGEMENT privilege is required in addition to the EXECUTE on DBMS_SPM in order to simply manage / evolve one's own SQL Plans in 11.2.0.4 / 12.1.0.1 / 12.1.0.2 ?
.
.
.
No comments:
Post a Comment