عنوان:

‫رمزگذاری رویه‌های ذخیره شده در SQL Server


نویسنده: صابر فتح الهی
تاریخ: ۱۳۹۱/۰۹/۰۶ ۰:۲۵
آدرس: www.dntips.ir
در بسیاری مواقع پیش می‌آید که در SQL رویه‌های ذخیره شده (Stored Procedure ) ایجاد می‌کنیم. اما پس از ایجاد در SQL این رویه قابل مشاهده بوده و می‌توان آن را ویرایش کرد. مثلا می‌خواهیم یک رویه ذخیره شده ساده را ایجاد نماییم.
ابتدا در SQL Management Studio (یا روش‌های دیگر) اقدام به ایجاد رویه می‌نماییم.
Create Procedure dbo.PWS_GetDataCount
AS
BEGIN
SELECT COUNT(*) FROM backupfile
END
همانگونه که در تصویر زیر مشاهده می‌نمایید این رویه ایجاد شده و قابل ویرایش می‌باشد.

خوب تا اینجای کار هیچگونه مشکلی نیست، اما مواقعی پیش می‌آید که نمی‌خواهیم کسی به سورس این رویه‌ها دسترسی داشته باشد، یا اینکه آنها را تغییر دهد، مثلا مواقعی که نرم افزار شما روی سایت مشتری اجرا شده و مشتری دسترسی به دیتابیس و رویه‌های آن دارد. در این مواقع می‌توان در صورت لزوم این رویه‌ها را فقط خواندنی کرد، یعنی حتی خود شما هم نمی‌توانید رویه را ویرایش نمایید (پس دقت کنید). روال کار بدین گونه است:

Create Procedure dbo.PWS_GetDataCount2
--Parameters
With Encryption
AS
BEGIN
SELECT COUNT(*) FROM backupfile
END

در واقع با نوشتن With Encryption قبل از AS می‌توان رویه ذخیره شده را رمزگذاری کرد. پس از ایجاد این رویه همانگونه که در تصویر زیر مشاهده می‌نمایید این رویه شکل یک کلید بروی آن ظاهر شده و دیگر قابل ویرایش نیست (بهتر است رویه‌های خود را در زمان انتشار روی سیستم مقصد رمزگذاری نمایید).

دقت نمایید که استفاده از این عمل تاثیری در سرعت اجرای رویه ذخیره شده ندارد. البته روش‌هایی هم برای عکس این عمل وجود دارد که می‌توانید از طریق این لینک به اطلاعات بیشتری دست پیدا کنید.

نظرات

  • مهمان در ۱۳۹۱/۰۹/۰۶ ۸:۲۰
    سلام
    مرسی از مقاله شما، فقط نکته ای در مورد Stored Procedure‌های Encrypt شده وجود دارد، و آن این است که، این نوع Procedure‌ها را نمی‌توان بطور قابل فهم در Execution Plan مشاهده نمود.
    مثال:
    CREATE PROCEDURE #RegularSP
    AS
    SELECT TOP 10 City
    FROM Person.Address
    GO
    اجرا با Execution Plan
    EXEC #RegularSP
    خروجی بصورت زیر خواهد بود:

    ایجاد Stored Procedure بصورت Encrypt شده:
    CREATE PROCEDURE #EncryptSP
    WITH ENCRYPTION
    AS
    SELECT TOP 10 City
    FROM Person.Address
    اجرا با Execution Plan 
    EXEC #EncryptSP
    خروجی بصورت زیر خواهد بود: 

    حذف Stored Procedure‌های ایجاد شده:
    DROP PROCEDURE #RegularSP
    DROP PROCEDURE #EncryptSP
     
    • صابر فتح الهی در ۱۳۹۱/۰۹/۰۶ ۱۰:۵۶
      درسته دوست من، بدلیل اینکه شما با عمل Encrypt فقط یک جعبه سیاه می‌بینید که در صورت وجود ورودی هایی میگیرد (پارامتر) و خروجی هایی پس می‌دهد ما داخل اون مشاهده نمی‌کنیم، و دلیل اصلی ما برای Encrypt همین است که کسی محتوی SP را نتواند ببیند حتی خود ما.
  • مهمان در ۱۳۹۱/۰۹/۰۷ ۹:۶
    مطلب بسیار خوبی بود و باعث یادآوری بسیاری نکات برای بنده شد و
    البته رمزگشایی SP ‌ها هم کار چندان سختی نیست و نرم افزار‌های زیادی جهت این امر می‌توان در اینترنت پیدا نمود.



    سایت سازنده نرم افزار
    sql-decryptor  
    • صابر فتح الهی در ۱۳۹۱/۰۹/۰۷ ۱۱:۵۹
      بله اخر پستم اشاره کردم به این موضوع
  • مهمان در ۱۳۹۱/۱۰/۲۶ ۰:۵۲

    مرسی

    بسیار مفید و کاربردی