فرض کنید مدیر پایگاه داده می خواهد به یک کاربر مجوز بدهد که بتواند بر روی یک جدول و یا بهتر بگوییم بر روی یک اشیا یک اسکیما دیگر، عملیات انجام دهد. به طور عادی کاربر نمی تواند هیچ عملیاتی مانند select, insert, update, delete و غیره را روی جدول اسکیما دیگری انجام دهد. به طور مثال فرض کنید حدولی به نام sample_table داریم و می خواهیم مجوزهای لازم برای کار بر روی جدول را به کاربر amirnami اعطا کنیم. توجه کنید که schema_name نام اسکیمایی است که شی و در این مثال جدول sample_table در آن قرار دارد.

ایجاد و اعطای نقش ها

یک نقش (role) شامل یک یا چند مجوز یا تمامی مجوزهای یک نقش دیگر است که به آن انتساب داده شده است. کاربرد نقش ها زمانی است که بخواهیم چندین مجوز را به کاربر اختصاص دهیم ولی به جای این کار می توانیم یک نقش تعریف کنیم و سپس تمامی مجوزها را به آن نقش انتساب دهیم و سپس نقش را به کاربر اعطا کنیم. همچنین می توانیم یک نقش را به نقش دیگر اضافه کنیم و با این کار تمامی مجوزها به نقش جدید انتساب داده می شوند.

اضافه کنیم و با این کار تمامی مجوزها به نقش جدید انتساب داده می شوند.برای ایجاد نقش باید از دستور create role استفاده کنیم. شکل زیر، نمای کلی این دستور را نشان می دهد. در ادامه مثال هایی از ایجاد نقش تا انتساب محوزها به آن و سپس انتساب نقش به کاربر نشان داده شده است

مطابق شکل و در کد بالا، از دستور create role به همراه عبارت not identified استفاده کرده ایم تا یک نقش به نام crud_role_on_sample_table را ایجاد کنیم. not identified به این معنی است که زمانی که نقش را به کاربر اعطا می کنیم نیازی به گذرواژه نیست. در مقابل عبارت identified by password وجود دارد و این معنی است که زمانی که نقش را اعطا می کنیم نیاز به وارد کردن گذرواژه خواهد بود.

پس از ایجاد کردن نقش باید مجوزها را به آن انتساب دهیم. فرض کنید می خواهیم مجوز اجرای چهار دستور select, update, insert و delete را به نقش انتساب دهیم برای این کار از دستور زیر استفاده کنید.

و در نهایت خود نقش را به کاربر اعطا می کنیم.

چگونه فهرست تمامی مجوزهای یک کاربر را پیدا کنیم

در اینجا می خواهیم دو جدول را معرفی کنیم و همچنین می خواهیم یک نقش پیشفرض به نام resource را معرفی کنیم. نما (view) به نام dba_sys_privs به مدیران کمک می کند که بفهمد کدام مجوزهای سیستمی به هر کاربر یا نقش تعلق گرفته است. به طور مثال دستور زیر فهرست تمامی مجوزهای سیستمی یک نقش به نام resource را نشان می دهد.

حال می خواهیم فهرست تمامی مجوزهای سیستمی مربوط به کاربر sys را فهرست کنیم، پس لازم است تا دستور بالا را به صورت زیر بازنویسی کنیم.

در مقابل جدول dba_sys_privs، نما dba_tab_privs وجود دارد که مجوزهای اشیا را برای هر نقش یا کاربر نشان می دهد. در دستورهای قبلی یک نقش به نام crud_on_sample_table ایجاد کردیم و چهار مجوز را انتساب دادیم.

لطفا دستور desc dba_tab_privs را اجرا کنید خواهید دید که می توانیم نام مالک، نام حدول و مجوز اعطا شده روی آن جدول را پیدا کنیم. دستور زیر این اطلاعات را نشان می دهد.

توجه کنید ستون owner نام مالک شی را نشان می دهد. در واقع مالک جدول، مالک تمامی اشیا درون اسکیما است.

بازپس گیری مجوز از کاربر یا نقش

در حالی که دستور grant برای اعطای مجوز بود، دستور revoke آنرا پس می گیرد. به طور مثال فرض کنید نفش create session که برای ایجاد جلسه به کار می رود را از کاربر amirnami پس بگیریم پس باید دستور زیر را اجرا کنیم.

و یا می خواهیم مجوزهای insert, delete و update کردن جدول sample_table را از نقش crud_on_sample_table را پس بگیریم برای این کار باید از دستور زیر استفاده شود.