شرح 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
يزيل القدرة على منح هذه الصلاحية للآخرين.