بلاگ IRAN OUG


به وبلاگ IRAN OUG (گروه کاربران اوراکل ایران) خوش آمدید.


تازه ترین مطالب کارشناسان این صنعت را بررسی کنید. برای مشاهده مطلب مورد نظر می توانید جستجو کنید.

آیا می خواهید مطالب خود را در اینجا مشاهده کنید؟ مطالب خود را بفرستید ثبت مطالب من

مطالب کاربران

جلوگیری از اجرای دستورات DDL ای کاربر - Securityچهارشنبه, 13 دی 1396 - حامد اسماعیلی-
موضوع: Database

گاهی اوقات نیاز است که بطور مثال کاربر نتواند اقدام به ALTER نمودن جداول نماید . در مثال زیر تمامی دسترسیهای کاربر به جز دستور TRUNCATE گرفته میشود.

CREATE OR REPLACE TRIGGER TEST.DDLTrigger
  BEFORE DDL ON schema
BEGIN
  if (ora_sysevent = 'TRUNCATE') then
    null; -- I do not care about truncate
  else
    raise_application_error(-20000, 'YOU CAN NOT DO DDL!');
  end if;
END;
/
روش دوم :

در مثال بالا با توجه به اینکه تریگر فوق بایستی در اسکیمای کاربر باشد ، در صورتی که کاربر اقدام به حذف و یا غیر فعال نمودن تریگر نماید ، دسترسی زدن DDL برایش باز میشود . حال در مثال زیر روشی را پیاده سازی میکنیم که از نظر امنیتی بهتر باشد. در حالت کلی با توجه به اینکه هر کاربر OWNER جداول خودش است نمیتوان دسترسی ALTER را از او گرفت . پس یک کاربر دیگر میسازیم و مراحل زیر را طی میکنیم.

1- ایحاد کاربر جدید (میتوان از اسکریپت ساخت کاربر قبلی کمک گرفت)

2- ایجاد SYNONYM از روی جداول کاربر قبلی(میتوان از اسکریپت زیر کمک گرفت)

3- دادن دسترسی های DML ای بر روی جداول اسکیمای قبلی

begin
for x in ( select table_name from DBA_TABLES where owner= 'TEST')
loop
dbms_output.put_line('CREATE OR REPLACE SYNONYM TEST2.' || x.table_name || ' FOR TEST.'|| x.table_name ||';');
dbms_output.put_line('GRANT DELETE, INDEX, INSERT, REFERENCES, SELECT, UPDATE, ON COMMIT REFRESH, QUERY REWRITE, DEBUG, FLASHBACK ON ACHDD5.' || x.table_name || ' TO TEST2;');
end loop;
end;
برچسب: Security,Database
1 - 1