در این قسمت از آموزش اوراکل بعد از آشنایی با Object Priviliges قصد داریم آموزش کار با نقشها (Roles) را یاد بگیریم.
یک نقشها (Roles) مجموعه و گروهی از مجوزها privileges که شما میتوانید به کاربر یا یک نقش role دیگر اعطا گردد.
خلاصه ای مزیت های مفیدی که باید از نقش ها roles استفاده باید کرد:
- به جای این که مجوزها privileges را بصورت تکی به یک کاربر اعطا کنید، شما می توانید نقش role را ایجاد کنید و سپس مجوزهایی privileges را به نقش اعطا کنید و سپس نقش role را به یک یا چند کاربر و یا نقش هایی roles اعطا کنید.
- زمانی که شما یک مجوز privilege از یک نقش role اضافه یا حذف می کنید ، همه کاربران و نقش هایی roles که به آن مجوز privileges اعطا شده است بصورت کاملا خودکار مجوزها privileges را دریافت و از دست می دهند.
- شما می توانید چندین نقش roles را به کاربر یا نقش role اعطا کنید.
- شما می توانید به نقش role کلمه عبور تنظیم کنید.
با توجه موارد مثبتی که نقش ها roles دارند . نقش ها roles می توانند به شما در مدیریت چندین مجوز و دسترسی ها privileges به چندین کاربر کمک فراوانی خواهد کرد.
ایجاد نقش
برای ایجاد نقش role، ایتدا کاربر بایستی مجوز سیستمی system privilege به نام CREATE ROLE را داشته باشد. با توجه به مثال با کاربری به نام system به دیتابیس متصل شده و برای کاربری به نام store مجوز سیستمی system privilege به نام CREATE USER می دهیم و با دستور ADMIN OPTION این امکان را برای کاربر store فراهم میکنیم که این مجوز را برای سایر کاربران اعطا کند و همچنین مجوز سیستمی دیگری به نام CREATE ROLE به کاربر store می دهیم تا بتواند نقش role ایجاد کند.

شما می توانید با استفاده از دستور CREATE ROLE نقش ایجاد کنید.
به عنوان مثال یا کاربری یه نام store به دیتابیس متصل شده و سه نقش role به نام های product_manager,hr_manager و overall_manager ایجاد می کنیم البته برای نفش به نام overall_manager کلمه عبوری به نام manager_password تنظیم می کنیم.

دادن مجوزها Privileges به نقش ها Roles
شما می توانید مجوزها privileges با استفاده از دستور GRANT به نقش ها role اعطا کنید. شما می توانید هر دو نوع مجوز system privilege و Object Priviliges را به یک یا چند نقش roles اعطا کنید و همچنین می توانید مجوزهای privileges یک نقش را به یک یا چند نقش بصورت مستقیم اعطا کنید.
مثال زیر به نقش های roles ایجاد شده مجوزهایی را اعطا نموده و همجنین به نقش overall_manager از طریق نقش های product_manager,hr_manager مجوزهای مربوطه را اعطا میکند.

دادن نقش Roles به کاربر
از طریق دستور زیر کاربر system دو کاربر ایجاد کرده و دسترسی ارتباط با دیتابیس اعطا می شود.

شما با استفاده از دستور GRANT نقشها (Roles) به کاربر user داده می شود.

در مثال بعد نقشی به نام overall_manager به کاربری به نام harry اعطا داده می شود.

بررسی نقش های Roles داده شده به کاربر
شما می توانید نقش هایی که به کاربر داده اید را در جدولی نام user_role_privs بررسی کنید و که ستون های این جدول به شرح ذیل می باشد.

در مثال زیر کاربری به نام harry به دیتابیس متصل شده و با کوئری زدن جدول user_role_privs می توانید نقش هایی که به این کاربر داده شده است را ببینید.

بررسی مجوزهای سیستمی System Privileges داده شده به نقش ها Roles
شما می توانید مجوزهای سیستمی system privileges داد شده به نقش ها را از طریق بررسی جدول role_sys_privs انجام دهید که ستون های جدول role_sys_privs به شرح ذیل می باشد.

با عنوان مثال اگر شما با کاربری به نام store به دیتابیس منصل شوید و کوئری جدول role_sys_privs را ببینید بصورت زیر به شما نمایش خواهد داد.

بررسی مجوزهای آبجکتی Object Privileges داده شده به نقش ها Roles
شما می توانید مجوزهای آبجکتی Object privileges داد شده به نقش ها را از طریق بررسی جدول role_tab_privs انجام دهید که ستون های جدول role_tab_privs به شرح ذیل می باشد.

کوئری زیر نمایش جدول role_tab_privs می باشد که با این شرط که نفش آن برابر HR_MANAGER باشد .

فعال و غیرفعال کردن نقش ها Roles
شما می توانید یک نقش Role را بااستفاده از دستور ALTER ROLE غیرفعال کنید و از دسترس خارج کنید. در مثال زیر شما با کاربری به نام system به دیتابیس ارتباط برقرار کرده و نقشی به نام hr_manager را از حالت default_role خارج کنیدو یصورت نقش پیش فرض نباشد.

و با استفاده از دستور SET ROLE می توانید نقشها (Roles) را فعال کنید. در مثال زیر با استفاده از دستور SET ROLE می توانید نقشی به نام hr_manager را فعال کنید.

لغو کردن و گرفتن نقش ها (Revoking a Role)
شما می توانید یک نقش role را از یک کاربر با استفاده از دستور REVOKE بگیرید و لغو کنید. در مثال زیر با کاربری به نام store به دیتابیس متصل شده و نقش overall_manager را از کاربر harry می گیرید.

حذف کردن و گرفتن مجوزها Privileges از یک نقش Role
شما می توانید یک مجوز privilege را از یک نقش Role با استفاده از دستور REVOKE حذف کنید و بگیرید. در مثال زیر به کاربر store به دیتابیس متصل شده و تمامی مجوزهای جداول products و product_types را از نقش product_manager حذف می کند.

حذف یک نقش Role
شما می توانید با استفاده از دستور DROP ROLE یک نقش را حذف drop کنید. شما در مثال زیر می توانید نقش های overall_manager , product_manager و hr_manager را حذف drop کنید.

اطلاعات بیشتر در مورد Roles