شرح REVOKE في SQL Server
الأمر REVOKE يُستخدم لإلغاء الامتيازات (permissions) التي تم منحها سابقًا للمستخدمين أو الأدوار. على عكس DENY، الذي يمنع الوصول صراحةً، فإن REVOKE يقوم فقط بإزالة الامتياز بدون فرض قيود إضافية.
الصيغة العامة:
REVOKE permission [, permission]...
ON object
FROM user_or_role;الشرح:
- الـ
permission: الامتياز الذي تريد إلغاءه، مثل:SELECT,INSERT,UPDATE,EXECUTE. - الـ
object: الكائن الذي يتعلق به الامتياز (مثل جدول، إجراء مخزن…). - الـ
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:
REVOKE | DENY |
|---|---|
| يزيل الامتياز الممنوح مسبقًا. | يمنع الوصول صراحةً بغض النظر عن الامتيازات الأخرى. |
| إذا كان للمستخدم صلاحية موروثة من دور آخر، يمكنه الاحتفاظ بالوصول. | يمنع الوصول حتى لو كان المستخدم لديه صلاحيات أخرى. |
عرض الامتيازات الحالية:
لمعرفة الامتيازات الممنوحة لمستخدم معين:
SELECT *
FROM sys.database_permissions
WHERE grantee_principal_id = USER_ID('John');ملاحظات:
- الـ
REVOKEلا يُعيد الامتيازات إلى حالتها الافتراضية إذا تم استخدامDENY. - إذا تم منح الصلاحية مع
WITH GRANT OPTION، فإنREVOKEيزيل القدرة على منح هذه الصلاحية للآخرين.