خانه/ امنیت/ Roles

Roles: گروه‌بندی مجوزها به‌جای تکرار برای هر کاربر

متوسط ۱۲ دقیقه مطالعه

فرض کن ۲۰ کارمند حسابداری داری که همه باید دقیقاً یک مجموعه مجوز یکسان داشته باشند. اگر مجوزها را تک‌تک به هر User بدهی، هم کار تکراری و پرخطاست، هم وقتی یک مجوز جدید لازم شود، باید ۲۰ بار همان کار را تکرار کنی. Role (نقش) این مشکل را حل می‌کند: مجوزها را یک‌بار به نقش می‌دهی، و کاربران را عضو آن نقش می‌کنی.

نقش‌های ثابت سرور (Fixed Server Roles)

این نقش‌ها از قبل توسط SQL Server ساخته شده‌اند و به Loginها (نه Userها) تعلق می‌گیرند:

  • sysadmin — بالاترین سطح؛ دسترسی کامل به همه‌چیز روی کل سرور.
  • serveradmin — پیکربندی و خاموش‌کردن سرور.
  • securityadmin — مدیریت Loginها و مجوزهایشان.

نقش‌های ثابت پایگاه‌داده (Fixed Database Roles)

این‌ها به Userها (در سطح یک پایگاه‌داده‌ی مشخص) تعلق می‌گیرند و در عمل خیلی بیشتر استفاده می‌شوند:

  • db_owner — کنترل کامل روی پایگاه‌داده.
  • db_datareader — اجازه‌ی SELECT روی همه‌ی جدول‌ها.
  • db_datawriter — اجازه‌ی INSERT/UPDATE/DELETE روی همه‌ی جدول‌ها.
  • db_ddladmin — اجازه‌ی تغییر ساختار (CREATE/ALTER/DROP)، اما نه دستکاری داده.
sql
-- اضافه‌کردن یک User به نقش ثابت db_datareader:
ALTER ROLE db_datareader ADD MEMBER ali_app;

نقش‌های سفارشی (Custom Roles)

اگر نقش‌های ثابت دقیقاً منطبق با نیازت نباشند (مثلاً «فقط اجازه‌ی خواندن جدول Orders و نوشتن در جدول Invoices»)، می‌توانی نقش خودت را بسازی:

sql
CREATE ROLE InvoiceClerk;
GRANT SELECT ON Orders TO InvoiceClerk;
GRANT INSERT, UPDATE ON Invoices TO InvoiceClerk;
ALTER ROLE InvoiceClerk ADD MEMBER ali_app;

حالا اگر فردا نیاز شد مجوز جدیدی به همه‌ی اعضای این تیم داده شود، فقط یک بار GRANT روی خودِ نقش کافی است — نه تکرار برای هر User.

جمع‌بندی این درس

  • Role، مجموعه‌ای از مجوزها را زیر یک نام واحد گروه‌بندی می‌کند.
  • نقش‌های ثابت سرور (مثل sysadmin) به Login و نقش‌های ثابت پایگاه‌داده (مثل db_datareader) به User تعلق می‌گیرند.
  • نقش سفارشی، بهترین گزینه برای گروه‌های دسترسی خاص کسب‌وکار است.
  • مدیریت مجوز از طریق نقش، بسیار کم‌خطاتر و مقیاس‌پذیرتر از مدیریت تک‌تک کاربر است.

در درس بعدی، خودِ دستورهای GRANT، REVOKE و DENY را با جزئیات کامل می‌بینیم — و یک قانون مهم درباره‌ی این‌که کدام‌یک همیشه برنده می‌شود.