أمان على مستوى العمود

يسمح الأمان على مستوى الأعمدة للعملاء بالتحكم في الوصول إلى أعمدة الجدول استنادًا إلى سياق تنفيذ المستخدم أو عضويته في المجموعة.

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

يمكنك تنفيذ الأمان على مستوى العمود باستخدام بناء جملة GRANT Object Permissions T-SQL. باستخدام هذه الآلية، يتم دعم كل من مصادقة SQL ومصادقة معرف Microsoft Entra (المعروف سابقا باسم Azure Active Directory).

ضع في اعتبارك أيضا القدرة على فرض أمان مستوى الصف على الجداول، استنادا إلى عامل تصفية العبارة WHERE .

يُظهر الرسم التخطيطي جدولًا تخطيطيًا مع العمود الأول برأسه قفل مغلق وخلاياه باللون البرتقالي بينما الأعمدة الأخرى عبارة عن خلايا بيضاء.

بناء الجملة

يسمح بناء جملة GRANT أذونات العنصر بمنح أذونات لقوائم الأعمدة المحددة بفواصل في جدول.

GRANT <permission> [ ,...n ] ON
    [ OBJECT :: ][ schema_name ]. object_name [ ( column [ ,...n ] ) ]
    TO <database_principal> [ ,...n ]
    [ WITH GRANT OPTION ]
    [ AS <database_principal> ]
<permission> ::=
    SELECT
  | UPDATE
<database_principal> ::=
      Database_user
    | Database_role
    | Database_user_mapped_to_Windows_User
    | Database_user_mapped_to_Windows_Group

أمثلة

يوضح المثال التالي كيفية تقييد TestUserمن الوصول إلى عمود SSN في الجدول Membership:

إنشاء Membership جدول مع SSN عمود يستخدم لتخزين أرقام الضمان الاجتماعي:

CREATE TABLE Membership
  (MemberID int IDENTITY,
   FirstName varchar(100) NULL,
   SSN char(9) NOT NULL,
   LastName varchar(100) NOT NULL,
   Phone varchar(12) NULL,
   Email varchar(100) NULL);

السماح TestUser بالوصول إلى جميع الأعمدة SSNباستثناء العمود الذي يحتوي على البيانات الحساسة:

GRANT SELECT ON Membership(MemberID, FirstName, LastName, Phone, Email) TO TestUser;

الاستعلامات التي يتم تنفيذها كفشل TestUser إذا كانت تتضمن SSN العمود:

SELECT * FROM Membership;

مع الخطأ الناتج:

Msg 230, Level 14, State 1, Line 12
The SELECT permission was denied on the column 'SSN' of the object 'Membership', database 'CLS_TestDW', schema 'dbo'.

حالات الاستخدام

بعض الأمثلة على كيفية استخدام الأمان على مستوى العمود اليوم:

  • تسمح شركة الخدمات المالية لمديري الحسابات بالوصول فحسب إلى أرقام الضمان الاجتماعي للعملاء (SSN) وأرقام الهواتف والبيانات الشخصية الأخرى.
  • يسمح موفر الرعاية الصحية للأطباء والممرضين بالوصول فحسب إلى السجلات الطبية الحساسة مع منع أعضاء قسم الفوترة من عرض هذه البيانات.

الخطوات التالية