شرح REVOKE في SQL Server

الأمر REVOKE يُستخدم لإلغاء الامتيازات (permissions) التي تم منحها سابقًا للمستخدمين أو الأدوار. على عكس DENY، الذي يمنع الوصول صراحةً، فإن REVOKE يقوم فقط بإزالة الامتياز بدون فرض قيود إضافية.


الصيغة العامة:

REVOKE permission [, permission]...
ON object
FROM user_or_role;

الشرح:

  1. الـpermission: الامتياز الذي تريد إلغاءه، مثل: SELECT, INSERT, UPDATE, EXECUTE.
  2. الـobject: الكائن الذي يتعلق به الامتياز (مثل جدول، إجراء مخزن…).
  3. الـuser_or_role: المستخدم أو الدور الذي تريد إلغاء الامتياز منه.

أمثلة عملية:

1. إلغاء امتيازات القراءة (SELECT) على جدول:

REVOKE SELECT 
ON OBJECT::dbo.Employees 
FROM John;
  • المستخدم John لن يكون لديه صلاحية قراءة البيانات من جدول Employees.

2. إلغاء عدة امتيازات دفعة واحدة:

REVOKE INSERT, UPDATE 
ON OBJECT::dbo.Products 
FROM SalesRole;
  • دور SalesRole لن يستطيع إدخال أو تعديل البيانات في جدول Products.

3. إلغاء صلاحية التنفيذ على إجراء مخزن:

REVOKE EXECUTE 
ON OBJECT::dbo.GetEmployeeDetails 
FROM John;
  • المستخدم John لن يستطيع تشغيل الإجراء المخزن GetEmployeeDetails.

الفرق بين REVOKE و DENY:

REVOKEDENY
يزيل الامتياز الممنوح مسبقًا.يمنع الوصول صراحةً بغض النظر عن الامتيازات الأخرى.
إذا كان للمستخدم صلاحية موروثة من دور آخر، يمكنه الاحتفاظ بالوصول.يمنع الوصول حتى لو كان المستخدم لديه صلاحيات أخرى.

عرض الامتيازات الحالية:

لمعرفة الامتيازات الممنوحة لمستخدم معين:

SELECT * 
FROM sys.database_permissions 
WHERE grantee_principal_id = USER_ID('John');

ملاحظات:

  1. الـREVOKE لا يُعيد الامتيازات إلى حالتها الافتراضية إذا تم استخدام DENY.
  2. إذا تم منح الصلاحية مع WITH GRANT OPTION، فإن REVOKE يزيل القدرة على منح هذه الصلاحية للآخرين.