أمان على مستوى العمود
يسمح الأمان على مستوى الأعمدة للعملاء بالتحكم في الوصول إلى أعمدة الجدول استنادًا إلى سياق تنفيذ المستخدم أو عضويته في المجموعة.
يعمل الأمان على مستوى العمود على تبسيط تصميم الأمان وترميزه في تطبيقك، مما يسمح لك بتقييد الوصول إلى العمود لحماية البيانات الحساسة. على سبيل المثال، التأكد من أن مستخدمين محددين يمكنهم الوصول إلى أعمدة معينة في الجدول ذي الصلة بقسمهم فحسب. يوجد منطق تقييد الوصول في طبقة قاعدة البيانات وليس بعيدا عن البيانات في طبقة تطبيق آخر. تطبق قاعدة البيانات قيود الوصول في كل مرة تتم فيها محاولة الوصول إلى البيانات من أي طبقة. يجعل هذا التقييد أمانك أكثر موثوقية وقوة عن طريق تقليل مساحة سطح نظام الأمان العام الخاص بك. بالإضافة إلى ذلك، يلغي الأمان على مستوى العمود أيضًا الحاجة إلى تقديم طرق عرض لتصفية الأعمدة لفرض قيود الوصول على المستخدمين.
يمكنك تنفيذ الأمان على مستوى العمود باستخدام بناء جملة 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) وأرقام الهواتف والبيانات الشخصية الأخرى.
- يسمح موفر الرعاية الصحية للأطباء والممرضين بالوصول فحسب إلى السجلات الطبية الحساسة مع منع أعضاء قسم الفوترة من عرض هذه البيانات.