بررسی اصول امنیتی پایگاه های داده بخش بیست و سوم
5-5 رمز نمودن اطلاعات
همانطور که گفته شد اطلاعات توسط رویههای ذخیره شده در پایگاه داده ذخیره میشوند. در ذیل رویهای که بر ی ذخیره اطلاعات پرسنل بکار رفته را مشاهده میکنید.
CREATE PROCEDURE sp_insert
@Id varchar(50) ,
@fname varchar(50) ,
@lname varchar(50) ,
@mobile varchar(max) ,
@field varchar(50) ,
@position varchar(50) ,
@madrak varchar(50) ,
@email varchar(max),
@address varchar(max)
AS
BEGIN
INSERT INTO tbl_person (Id,fname,lname,mobile,field,position,madrak,address,email) values (@Id,@fname,@lname,EncryptByCert(Cert_ID('c1'),@mobile),@field,@position,@madrak,@address,@email)
END
در این رویه شماره تلفن همراه بصورت رمزنگاری شده در پایگاه داده ذخیره میشود. رمزنگاری با استفاده از گواهینامه انجام شده است و نام آن c1 است. برای مشاهده فیلد تلفن همراه نیز باید از گواهینامه c1 استفاده شود. در ضمن باید کلمه رمز گواهینامه نیز موجود باشد. @pass برای دریافت کلمه رمز تعبیه شده است. بهتر است نوع آن nvarchar تعریف شود.
CREATE PROCEDURE sp_select
@pass nvarchar(50)
AS
BEGIN
SELECT Id,fname,lname,CONVERT(varchar(max),DecryptByCert(Cert_ID('c1'),mobile,@pass))AS mobile,field,position,madrak,address,email from tbl_person
END
شکل5-6 : اعطای دسترسی به نقش برنامه ای manager
به کاربر باید اختیار استفاده از گواهینامه داده شود و در واقع این اختیار باید به APR متناظر با این کاربر داده شود(شکل5-6 ).
در فرمهایی دیگر از متدهای دیگری برای رمزنگاری استفاده شده است. در فرم پروژه رمزنگاری با استفاده از کلید نامتقارن و در فرم اخذ پروژه این عمل با استفاده از کلید متقارن انجام شده است. هنگام استفاده از هر یک باید دسترسیها صریحا به نقش مورد نظر داده شود به عبارت دیگر اگر از کلید متقارن ، کلید نا متقارن و یا هر متد دیگری برای رمز نگاری استفاده میکنید باید دسترسی به کلید متقارن ، کلید نا متقارن همانند شکل 5-6 به نقش مورد نظر داده شود تا این کاربر بتواند اعمال لازم را بر روی داده ها انجام دهد. فرم های دیگر و حوزۀ عملیاتی آنها مشابه فرم پرسنل است و نیازی به توضیح بیشتر نمیباشد. برای مطالعه روشهای رمزنگاری به بخش (3-10) مراجعه شود.
5-6 کار با استثناها
در این سیستم هیچ کاربری از فشردن دکمه و یا انجام عملی در محیط برنامه منع نشده است. محدودیتها فقط از سمت پایگاه داده اعمال میشود. در این سیستم دو کاربر وجود دارند که یکی دارای دسترسی کامل است. نام این کاربر manager است و قادر به انجام هر عملی در برنامه میباشد. در واقع manager همان APR است که دسترسی به تمامی منابع به آن داده شده است. عنوان کاربر دوم employee است که بسیاری از اختیارات از جمله اجرای رویه کنترلی sp_insert از وی سلب شده است و این کاربر قادر به ذخیره سازی اطلاعات مربوط به پرسنل نمیباشد. این کاربر هنگام اجرای برنامه همان اطلاعاتی را مشاهده میکند که کاربر manager مشاهده میکند با این تفاوت که اگر این کاربر اقدام به ذخیره سازی اطلاعات کند پیغامی از سمت SQLServer مبنی بر اینکه کاربر مجاز به اجرای رویه کنترلی sp_insert نمیباشد به برنامه ارسال میشود. به این پیغام خطا ، استثناء گفته میشود. این خطا در هنگام اجرای برنامه باعث ایجاد اختلال در اجرای عادی برنامه میشود. در ضمن این پیغام به زبان انگلیسی بوده و قابل فهم برای یک کاربر غیر متخصص نمیباشد. برای مقابله با این مشکل از بلوکهای try , catch استفاده میشود. با استفاده از این امکان میتوان از نمایش پیغام خطا ارسالی از سمت SQLServer جلوگیری کرده و به جای آنها پیامهای فارسی قابل فهم چاپ کرد. در ضمن با این کار مانع خاتمه برنامه در صورت مواجه شدن با یک استثنا میشویم. هر چه مدیریت استثناها بخوبی انجام شود کیفیت اجرایی برنامه بالا میرود و استثناها باعث قطع غیر عادی برنامه نمیشود. در کدهای فوق این استثناها تا حد امکان مدیریت شدهاند ولی کنترل دقیق مستلزم اجرای آزمایشی برنامه در یک محیط عملی است. کاربران در مدت کار با نرمافزار در صورت مشاهده پیغامهای نامفهوم آنها را کارشناس نرمافزار گزارش میدهند و درصد این خطاها پس از مدتی به دلیل اصلاحات بعمل آمده به میزان بسیار زیادی کاهش مییابد. نمونهای از پیغام خطا ارسالی از سوی SQLServer و پیغام معادل آن بزبان فارسی در ذیل آورده شده است. برای آشکار شدن موضوع به مثال زیر توجه کنید :
فرض کنید کاربری با عنوان employee اجازه وارد کردن داده در پایگاه داده را ندارد. برای اعمال چنین محدودیتی ، در نقش برنامهای که برای این گروه از کاربران تعریف شده دسترسی به رویه ذخیره شده متناظر با این عمل ، سلب شده است(شکل 5-7).