SQL Server: GRANT Statement

إنشاء مستخدم:

عند إنشاء مستخدم جديد باستخدام CREATE LOGIN أو CREATE USER، لا يحصل على أي امتيازات افتراضيًا. يمكنك استخدام GRANT لمنح الامتيازات المطلوبة.


صيغة الأمر GRANT:

GRANT permission [, permission]...
ON object
TO user_or_role
WITH GRANT OPTION;

الشرح:

  • الـpermission: نوع الصلاحية (مثل SELECT, INSERT, UPDATE, EXECUTE).
  • الـobject: الكائن المستهدف (جدول، عرض، قاعدة بيانات…).
  • الـuser_or_role: المستخدم أو الدور الذي يحصل على الامتياز.
  • الـWITH GRANT OPTION: يسمح للمستخدم بمنح نفس الامتيازات لآخرين.

أنواع الامتيازات:

1. الامتيازات العامة (Global Privileges):

تنطبق على الخادم بالكامل باستخدام ON *.*:

GRANT CONTROL SERVER TO [username];

2. امتيازات على قاعدة بيانات محددة:

GRANT SELECT, INSERT 
ON DATABASE::DatabaseName 
TO [username];

3. امتيازات على جدول محدد:

GRANT SELECT, UPDATE 
ON OBJECT::dbo.TableName 
TO [username];

4. امتيازات على إجراء مخزن:

GRANT EXECUTE 
ON OBJECT::dbo.StoredProcedureName 
TO [username];

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

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

امتيازات شائعة في SQL Server:

الصلاحيةالوصفالمستوى
SELECTقراءة البيانات.جدول / قاعدة بيانات
INSERTإدخال البيانات.جدول
UPDATEتحديث البيانات.جدول / أعمدة
DELETEحذف البيانات.جدول
EXECUTEتنفيذ الإجراءات المخزنة.إجراء مخزن
ALTERتعديل الكائن (جداول، قواعد بيانات).جدول / قاعدة بيانات
CONTROLالتحكم الكامل في قاعدة بيانات أو جدول.جدول / قاعدة بيانات
VIEW DEFINITIONعرض تعريف الكائنات.جدول / إجراء مخزن

مثال عملي:

إنشاء مستخدم ومنح امتيازات:

CREATE LOGIN John WITH PASSWORD = 'Password123';
CREATE USER John FOR LOGIN John;
 
GRANT SELECT, INSERT 
ON OBJECT::dbo.Employees 
TO John;
 
GRANT EXECUTE 
ON OBJECT::dbo.GetEmployeeDetails 
TO John;

ملاحظات:

  1. استخدم DENY لإلغاء الامتيازات بدلاً من REVOKE إذا كنت تريد منع الوصول صراحةً.

  2. لتطبيق الامتيازات مباشرةً، تأكد من تحديث الإعدادات باستخدام:

    RECONFIGURE;