منح صلاحيات الوصول GRANT

من موسوعة حسوب
< SQL

يستخدم هذا الأمر لمنح صلاحيات الوصول access privileges لمستخدمٍ أو مجموعة مستخدمين أو أكثر، وله إحدى الصيغ العامّة الآتية (بحسب محركات البيانات المختلفة):

دورة علوم الحاسوب
  • 62 ساعة فيديو تدريبية
  • من الصفر دون الحاجة لخبرة مسبقة
  • شهادة معتمدة من أكاديمية حسوب
  • متابعة أثناء الدورة من فريق مختص

في محرك البيانات PostgreSQL

GRANT { { SELECT | INSERT | UPDATE | DELETE | REFERENCES }
  [, ...] | ALL [ PRIVILEGES ] }
  ON [ TABLE ] tbl_name [, ...]
  TO { [GROUP ] name | PUBLIC | CURRENT_USER [, ...] } [ WITH GRANT OPTION ];

إعطاء صلاحية تنفيذ استعلامات SELECT و INSERT و UPDATE و DELETE وإنشاء مفتاح ثانوي عبر الكلمة المفتاحية REFERENCES أو كافة الصلاحيات على الجدول tbl_name للمستخدم باسم name أو مجموعة مستخدمين GROUP name أو لكافة المستخدمين PUBLIC أو للمستخدم الحالي CURRENT_USER، وعند إضافة العبارة WITH GRANT OPTION فإنها تتيح للمستخدم إعطاء الصلاحيات لمستخدم آخر.

GRANT { { SELECT | INSERT | UPDATE | REFERENCES } ( column_name [, ...] )
  [, ...] | ALL [ PRIVILEGES ] ( column_name [, ...] ) }
  ON [ TABLE ] tbl_name [, ...]
  TO { [GROUP ] name | PUBLIC | CURRENT_USER [, ...] } [ WITH GRANT OPTION ];

إعطاء صلاحية تنفيذ استعلامات SELECT و INSERT و UPDATE وإنشاء مفتاح ثانوي عبر الكلمة المفتاحية REFERENCES أو كافة الصلاحيات على العمود column_name (أو أكثر من عمود) في الجدول tbl_name للمستخدم باسم name أو مجموعة مستخدمين GROUP name أو لكافة المستخدمين PUBLIC أو للمستخدم الحالي CURRENT_USER، وعند إضافة العبارة WITH GRANT OPTION فإنها تتيح للمستخدم إعطاء الصلاحيات لمستخدم آخر.

GRANT { { CREATE | CONNECT | TEMPORARY} [, ...] | ALL [ PRIVILEGES ] }
  ON DATABASE database_name [, ...]
  TO { [GROUP ] name | PUBLIC | CURRENT_USER [, ...] }[ WITH GRANT OPTION ];

إعطاء الصلاحيات بإنشاء العناصر (كالجداول أو الفهارس، ...إلخ.) CREATE أو الاتصال بقاعدة البيانات CONNECT أو إنشاء جداول مؤقتة TEMPORARY في قاعدة البيانات باسم database_name للمستخدم باسم name أو مجموعة مستخدمين GROUP name أو لكافة المستخدمين PUBLIC أو للمستخدم الحالي CURRENT_USER، وعند إضافة العبارة WITH GRANT OPTION فإنها تتيح للمستخدم إعطاء الصلاحيات لمستخدم آخر.

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
  ON FUNCTION function_name [ ( [ [ argmode ] [ arg_name ] arg_type [, ...] ] ) ] [, ...]
  TO { [GROUP ] name | PUBLIC | CURRENT_USER [, ...] } [ WITH GRANT OPTION ];

إعطاء الصلاحيات بتنفيذ EXECUTE (أو كافة الصلاحيات المتاحة ALL PRIVILEGES) للدالة المحددة باسم function_name (والتي تحدد معاملاتها بالنوع argmode كدخل أو خرج والاسم arg_name ونوع البيانات arg_type) وذلك  للمستخدم باسم name أو مجموعة مستخدمين GROUP name أو لكافة المستخدمين PUBLIC أو للمستخدم الحالي CURRENT_USER، وعند إضافة العبارة WITH GRANT OPTION فإنها تتيح للمستخدم إعطاء الصلاحيات لمستخدم آخر.

أمثلة

لمنح صلاحية إدخال سجلات جديدة للجدول books لكافة المستخدمين يُستخدم الأمر:

GRANT INSERT ON books TO PUBLIC;

ولمنح كافة الصلاحيات المتعلقة بقاعدة البيانات centre_db للمستخدم الحالي والسماح له بمنح الصلاحيات لمستخدم آخر، يُستخدَم الأمر:

GRANT ALL PRIVILEGES ON DATABASE centre_db 
TO CURRENT_USER WITH GRANT OPTION;

ولمنح صلاحية تنفيذ الدالة get_final_bill للمستخدم mohammad يُستخدم الأمر:

GRANT EXECUTE ON FUNCTION get_final_bill (customer_id int) TO mohammad;

في محركي البيانات MySQL و Oracle

GRANT
  priv_type [(column_list)]
  ON [ {TABLE | FUNCTION} ] priv_level
  TO user
  [WITH {GRANT OPTION | resource_option} ...]

وذلك لإعطاء المستخدم user نوع صلاحية priv_type على الأعمدة column_list الموجودة في العنصر المحدد (جدول أو دالة) بمستوى معين من الصلاحيات priv_level ومنحه إمكانية إعطاء الصلاحيات لمستخدم آخر WITH GRANT OPTION أو تحديد بعض خيارات المصادر resource_option، وتوضح الجداول الآتية الخيارات الممكنة لكلّ مما سبق.

خيارات نوع الصلاحية priv_type

الخيار مهمته
ALL [PRIVILEGES]‎ كافة الصلاحيات
ALTER صلاحية تعديل الجدول ALTER TABLE
CREATE صلاحية إنشاء قاعدة بيانات جديدة أو جدول جديد
CREATE USER صلاحية إنشاء مستخدم جديد
CREATE VIEW صلاحية إنشاء عرض جديد
DELETE صلاحية الحذف DELETE
DROP صلاحية الحذف DROP
EXECUTE صلاحية التنفيذ
INDEX صلاحية إنشاء أو حذف الفهارس
INSERT صلاحية إضافة سجلات جديدة
REFERENCES صلاحية ربط الجداول عبر المفتاح الثانوي
SELECT صلاحية تنفيذ استعلام SELECT
UPDATE صلاحية تنفيذ استعلام UPDATE

خيارات مستوى الصلاحية priv_level

المستوى دلالته
* كافة الجداول في قاعدة البيانات الحالية
*.* كافة الجداول في كافة قواعد البيانات الموجودة
db_name.*‎ كافة الجداول الموجودة في قاعدة البيانات db_name
db_name.tbl_name الجدول tbl_name الموجود في قاعدة البيانات db_name
tbl_name الجدول tbl_name

خيارات المصادر resource_option

الخيار مهمته
MAX_QUERIES_PER_HOUR count لتحديد العدد الأقصى للاستعلامات المسموحة خلال الساعة بالعدد count
MAX_UPDATES_PER_HOUR count لتحديد العدد الأقصى للتحديثات (التعديلات) المسموحة خلال الساعة بالعدد count
MAX_CONNECTIONS_PER_HOUR count لتحديد العدد الأقصى للاتصالات المسموحة خلال الساعة بالعدد count

أمثلة

لمنح صلاحية إدخال سجلات جديدة للجدول books الموجود في قاعدة البيانات centre_db للمستخدم ahmad مع إمكانية إعطائه الصلاحيات لمستخدم آخر وبحد أقصى 5 اتصالات خلال الساعة، يُستخدم الأمر:

GRANT INSERT ON TABLE centre_db.books TO ahmad WITH GRANT OPTION MAX_CONNECTIONS_PER_HOUR 5;

ولمنح كافة الصلاحيات المتعلقة بكافة الجداول الموجودة في قاعدة البيانات centre_db للمستخدم mohammad يُستخدَم الأمر:

GRANT ALL PRIVILEGES ON centre_db.* TO mohammad;

في محرك البيانات SQL Server

GRANT { ALL [ PRIVILEGES ] }  
  | permission [ ( column [ ,...n ] ) ] [ ,...n ]  
  [ ON object ] TO name [ ,...n ]   
  [ WITH GRANT OPTION ];

إذ يمكن منح بعض الصلاحيات أو كلها على الأعمدة المحدد باللائحة column والموجودة في العنصر object للمستخدم باسم name مع إعطائه إمكانية منح الصلاحيات لمستخدم آخر WITH GRANT OPTION، وتختلف الصلاحيات المتاحة بحسب العنصر المحدد object كما هو موضح في الجدول الآتي:

العنصر الصلاحيات المتاحة
قاعدة بيانات CREATE DATABASE

CREATE FUNCTION

CREATE TABLE

CREATE VIEW

دالة تعيد قيمة أوليّة scalar EXECUTE
دالة تعيد جدول من النتائج DELETE

INSERT

SELECT

UPDATE

جدول DELETE

INSERT

REFERENCES

SELECT

UPDATE

عرض VIEW DELETE

INSERT

SELECT

UPDATE

وللعودة إلى كافة الأذونات permission التي يتيحها محرك SQL Server تمكن الاستفادة من الصفحة.

أمثلة

لمنح صلاحية إنشاء عرض view للمستخدم mohammad في قاعدة البيانات centre_db والسماح له بمنح الصلاحيات لمستخدم آخر يُستخدم الأمر:

GRANT CREATE VIEW ON centre_db TO mohammad WITH GRANT OPTION;

ولمنح كافة الصلاحيات المتعلقة بالجدول books للمستخدم sarah يُستخدَم الأمر:

GRANT ALL ON books TO sarah;

التوافقية

SQLServer SQLite Oracle PostgreSQL MySQL
نعم لا نعم نعم نعم

مصادر