اخفي بياناتك الهامة من عيون المتطفلين
تقنية جديدة في أوركل 12c
تزداد أهمية البيانات يوماً بعد يوم، وأصبح أمن المعلومات والمحافظة على البيانات هاجساً يؤرق المطورين وخاصة بعد تزايد استخدام الشبكة العنكبوتية (الانترنت).
وأنت واحد من أولئك الأشخاص الذين تقع على عاتقهم جزء كبير من هذه المسئولية، لتوصيل الفكرة من هذه التدوينه أعددت هذا السيناريو، إفترض انك تعمل في تطوير نظام بنكي وبتالي فأنت بحاجة الى إخفاء بعض البيانات الحساسة عن أعين مستخدمي النظام وخاصة المتطفلين مثل آخر عملية سحب من الرصيد, وكذلك Social Security Numbers (SSN) وأشياء كثيرة آخرى.
لتتمكن من إخفاء بعض الأعمدة من الجدول في الطريقة التقليدية القديمة تحتاج أولاً ان يكونوا مستخدمي النظام Real Users مستخدمين حقيقين على مستوى قاعدة البيانات. ولتوصيل الفكرة بشكل مبسط تخيل معي انه يوجد جدول منشئ فعلياً على قاعدة البيانات اسمه Accounts_Tb
CREATE TABLE account_tb
(
Account_Id NUMBER(11,0),
Account_name VARCHAR2(80),
email VARCHAR2(50),
SSN NUMBER(15,0),
Last_dept_Dt DATE
)
|
ونريد إخفاء بيانات ال SSN, Last_dept_Dt Columns , أولاً نقوم بإنشاء , View من هذا الTable على النحو التالي:
CREATE VIEW account_vw
AS
SELECT A.Account_Id, A.Account_name, A.email
FROM account_tb A ;
|
ثم نقوم بعمل CREATE public synonym لهذه الView ولكن اسمها يكون عبارة عن اسم الجدول الرئيسي المنشأ منه الView وهو account_tb
CREATE public synonym account_tb FOR SCHEMAX.account_vw
|
الان نقوم بمنح مستخدمي نظام صلاحية على هذه ال synonym والتي هي بدورها اسم الجدول الخاص بك كما هو موضح سابقاً.
grant select ON account_tb TO USERX;
grant select ON account_tb TO ROLEX;
|
وبتالي في حال الاستعلام من قبل USER ال USERXأو من قبل المستخدمين الذين معهم صلاحيات على ROLE ال ROLEX فإن النتيجة تكون كتالي:
SELECT *
FROM account_tb;
|
الحقول/الاعمدة التي سوف تظهر للمستخدم
|
Account_Id| A.Account_name| A.email
|
تمام، تم إخفاء البيانات الحساسة من أعين متطفلي النظام. لكن ماذا لو أردنا أن نقوم بعمليات DML (Data Manipulation Language)
[Insert, Update, Delete] نحتاج الى تعديل في الview بإضافة INSTEAD OF Trigger يمكنك مراجعة ذلك ان لم يكن عندك معلومات كافية عن ذلك لأنه ليس موضوع مقالنا.
لكن مهلاً، يبدو ان ذلك مرهقاً لك كمبرمج قواعد بيانات، إذاً ما الحل في إخفاء البيانات الحساسة ؟
لا تقلق عزيزي المطور يوجد ميزة جديدة في Oracle 12c للقيام بهذه المهمة دون حاجة الى الجهد البرمجي وذلك كتالي:
مرحلة انشاء الTable
CREATE TABLE account_tb
(
Account_Id NUMBER(11,0),
Account_name VARCHAR2(80),
email VARCHAR2(50) invisible,
SSN NUMBER(15,0) invisible,
Last_dept_Dt DATE
)
|
وبتالي عند عمل Select فإن الاعمدة/ الحقول المخفية عن أعين مستخدمي النظام لا تظهر، ووبهذا تكون قد أخفيت بياتك الحساسة دون أدني جهد منك.
SELECT *
FROM account_tb;
|
الحقول/الاعمدة التي سوف تظهر للمستخدم
|
Account_Id| A.Account_name| A.email
|
ادخال البيانات:
insert into account_tb(1,'test','test@palsoft.blogspot.com');
|
وصل بنا قطار العلم ان نهاية هذه المحطة، نراكم في المحطة التالية وهي Default Values ان كان لنا في العمر بقية. الى ذلك الوقت دمتم بحفظ الله ورعايته.