مقالات

کد: AC-FA-89 تاریخ انتشار: 1393/12/2
امضای روالهای ذخیره شده در SQL

امضای روال های ذخیره شده به معنای قرار دادن مجوزهایی در استفاده از این روال ها می باشد. اين مورد بدين منظور انجام مي شود كه در صورتیکه کاربری به این مجوزها دسترسی ندارد، امکان تغییر در روال را نداشته باشد.

امنیت

از آغاز به کار اینترنت بحث امنیت همواره یکی از مفاهیم مهم و قابل توجه گسترش دهندگان وب سایت های اینترنتی بوده است. برقراری امنیت در وب سایت نیازمند رعایت قواعد بسیاری زیادی است که بسته به زبان برنامه نویسی سایت، بانک های اطلاعاتی استفاده شده، وب سرور و ... متغیر بوده و هیچ گاه یک روال روتین و معمول را در بر نمی گیرند. از همین رو امنیت هیچ گاه صددرصد قابل تضمین نبوده و هرقدر موارد امنیتی با جزئیات رعایت شوند، باز هم ممکن است حفره های برای نفوذ توسط هکرها کشف شود.
یکی از مهم ترین بخش های هر سایت که اطلاعات آن از اهمیت فوق العاده بالایی برخوردار بوده و توجه گسترش دهندگان را بیش از سایر بخش ها به خود جلب کرده است، بانک های اطلاعاتی (Database) می باشد. در میان بانک های اطلاعاتی محصولات ارائه شده توسط کمپانی مایکروسافت که با عنوان Microsoft SQL Server شناخته می شوند بسیار مورد توجه گسترش دهندگانی می باشد که توسط زبان های برنامه نویسی ASP و ASP.NET نسبت به ایجاد وبسایت ها اقدام می نمایند.
راه های بسیاری برای افزایش امنیت بانک های اطلاعاتی Ms SQL وجود دارد که یکی از آن ها امضای روال های ذخیره شده بر روی SQL می باشد.
(Signing stored procedures in SQL Server)

امضای روال های ذخیره شده در SQL

شما می توانید روال ذخیره شده (Stored Procedure) را توسط یک گواهینامه یا یک کلید نامتقارن امضا نمائید. این عمل برای زمانی در نظر گرفته شده است که مجوزها نمی توانند از زنجیر مالکیت به ارث برده شوند و یا این زنجیر پاره شده است. (به عنوان نمونه در بانک های اطلاعاتی پویا). سپس شما یک کاربر منطبق بر این گواهینامه ایجاد نموده و به کاربر گواهینامه مجوزهای لازم برای دسترسی به روال های ذخیره شده را اعطا می نمائید. زمانی که روال ذخیره شده اجرا می شود، SQL Server مجوزهای کاربر گواهینامه را با مجوزهای فراخواننده ترکیب می کند. برخلاف دستور EXECUTE AS این عمل زمینه اجرای روال را تغییر نمی دهد. توابع درونی که آدرس ورود و نام کاربری را بازمی گردانند به جای نام کاربری گواهینامه، نام فراخواننده را باز می گردانند.
امضای دیجیتالی یک داده رمزگذاری شده توسط یک کلید محرمانه است که بوسیله امضا کننده ایجاد شده است. کلید محرمانه این اطمینان را به وجود می آورد که امضای دیجیتالی منحصرا در اختیار مالک یا حمل کننده امضا می باشد. شما می توانید روال های ذخیره شده، توابع و تریگرها را امضا کنید.

نکته

توجه داشته باشید که شما می توانید یک گواهینامه در پایگاه داده اصلی ایجاد نموده تا توسط آن مجوزهای سطح سرور را اعطا نمائید.

ایجاد گواهینامه

هنگامی که روال ذخیره شده را توسط یک گواهینامه امضا می کنید، خلاصه ای از داده ها شامل کد روال های ذخیره شده که توسط الگوریتم Hash کد گذاری شده اند توسط کلید محرمانه ایجاد می شوند. در ضمن اجرا این داده ها توسط کلید عمومی رمزگشایی شده و با مقدار کد شده در روال ذخیره شده مقایسه می شوند. ویرایش روال های ذخیره شده مقدار Hash شده را بی اعتبار می کند، به طوری که پس از آن امضای دیجیتالی مطابقت نمی کند. این عمل افرادی را که به کلید محرمانه دسترسی ندارند از تغییر کد روال های ذخیره شده منع می کند. بنابراین پس از هربار تغییر روال، می بایست آن را امضا نمائید.

1.امضای یک ماژول شامل چهار مرحله به شرح ذیل می باشد:

2.ایجاد یک گواهینامه توسط دستور ذيل:

CREATE CERTIFICATE [certificateName]

با استفاده از Transact-SQL. این دستور دارای چندین گزینه برای تنظیم تاریخ شروع و پایان کلمه عبور می باشد. تاریخ انقضای پیش فرض یکسال می باشد. ایجاد کاربر بانک اطلاعاتی مرتبط با گواهینامه فعلی با استفاده از دستور ذيل:

CREATE USER [userName] FROM CERTIFICATE [certificateName]

توسط Transact-SQL. این کاربر می بایست در پایگاه داده موجود باشد و به هیچ گواهینامه ای مرتبط نباشد. 3.اختصاص مجوزهای لازم به کاربر گواهینامه بر روی بانک اطلاعاتی

نکته

امکان اختصاص گواهینامه به کاربری که مجوز ابطال توسط دستور DENY را داشته است وجود ندارد. دستور DENY همواره نسبت به دستور GRANT (اختصاص) دارای اولویت می باشد و باعث توقف ارث بری مجوزهای اختصاص یافته به کاربر گواهینامه توسط فراخواننده می شود.


4.امضای روال گواهینامه توسط دستور ذیل با استفاده از Transact-SQL :

ADD SIGNATURE TO [procedureName] BY CERTIFICATE [certificateName]
  • نویسنده: فرشید نجفی
منبع: پارس دیتا
آدرس منبع: https://www.parsdata.com/articles/signing-stored-procedures-in-sql