خوش آموز درخت تو گر بار دانش بگیرد، به زیر آوری چرخ نیلوفری را
نحوه encrypt کردن Stored Procedure، View، Function در SQL Server
بنا به دلایل امنیتی یا شرایطی که درآن هستید، شاید نیاز دارید که همه stored procedure ها، viewها، user defined function ها را در SQL Server رمزگذاری یا encrypt کنید.
برای مخفی کردن کد stored procedure یا View و یا function از WITH ENCRYPTION در زمان ایجاد اسکریپت استفاده کرده تا encrypt آن stored procedure یا View و یا function ایجاد شده و از دید سایرین پنهان بماند. به منظور encrypt کردن stored procedure با روش encrypt کردن، روش چندان مطمئنی نیست چرا که امروزه در اینترنت ابزارهای بسیار زیادی هستند که این رمزگذاری را شکسته و کد در دسترس قرار می گیرد. از این روش برای رمزگذاری اطلاعات و کدهای محرمانه استفاده نکنید.
پس از رمزگذاری ، هیچ راه مستقیمی در SQL Server برای رمزگشایی این روش وجود ندارد. در دستور CREATE که برای ایجاد شیء مورد نظرتان استفاده می کنید، حتما قبل از Run کردن آن، encrypt را در کد لحاظ کنید.
اما چگونه اینکار انجام می شود؟ چگونه می توانیم در SQL Server همه یا بخشی از procedure ها، viewها، user defined function ها را Encrypt کنیم.
اگر هر دو stored procedure را اجرا کنید، نتایجی مشابه با تصویر زیر را دریافت می کنید.
خب، حالا sp_helptext برای هر دو stored procedure اجرا کنید تا کدهای آنها را ببینید. با این روش هرگز نمی توانید کد stored procedure ای که Encrypt کرده اید را مشاهده کنید و به جای آن پیغام The text for object ‘MTB_WithEncryption’ is encrypted را دریافت خواهید کرد.
اگر درصدد باز کردن همین stored procedure رمزگذاری شده از طریق Object Explorer در SSMS باشید، باز هم با خطا مواجه خواهید شد.
در SQL Server Profiler یا دو Event، SP:StmtStarting و SP:StmtEnding به سراغ stored procedure ای که رمزگذاری کرده بودید بروید و خواهید دید که در خروجی - Encrypted text را دریافت خواهید کرد.
در ادامه دو Function که یکی بدون ENCRYPTION و دیگری با ENCRYPTION است را خواهید دید:
حالا با استفاده از sp_helptext، درصدد دیدن کدهای هر دو Function باشید. درست همانطور که در stored procedure ایکه رمزگذاری شده بود و دیدن کد آن مقدور نبود، در اینجا هم با همین شرایط مواجه خواهید شد.
از طریق object explorer در SSMS هم نمی توانید کد Function را مشاهده کنید.
فقط باید در اسکریپت CREATE VIEW از گزینه WITH ENCRYPTION استفاده کنید.
این یکی از ساده ترین روش برای پنهان کردن کد از دید سایرین است.
ولی شکستن این رمزگذاری امری ساده است و با یک جستجوی ساده در اینترنت برنامه های زیادیکه اینکار را انجام می دهند را می توانید پیدا کنید.
برای مخفی کردن کد stored procedure یا View و یا function از WITH ENCRYPTION در زمان ایجاد اسکریپت استفاده کرده تا encrypt آن stored procedure یا View و یا function ایجاد شده و از دید سایرین پنهان بماند. به منظور encrypt کردن stored procedure با روش encrypt کردن، روش چندان مطمئنی نیست چرا که امروزه در اینترنت ابزارهای بسیار زیادی هستند که این رمزگذاری را شکسته و کد در دسترس قرار می گیرد. از این روش برای رمزگذاری اطلاعات و کدهای محرمانه استفاده نکنید.
پس از رمزگذاری ، هیچ راه مستقیمی در SQL Server برای رمزگشایی این روش وجود ندارد. در دستور CREATE که برای ایجاد شیء مورد نظرتان استفاده می کنید، حتما قبل از Run کردن آن، encrypt را در کد لحاظ کنید.
اما چگونه اینکار انجام می شود؟ چگونه می توانیم در SQL Server همه یا بخشی از procedure ها، viewها، user defined function ها را Encrypt کنیم.
Encrypting Stored Procedure
برای encrypt کردن یک stored procedure، فقط کافیست که از WITH ENCRYPTION در CREATE PROCEDURE استفاده کنید. در ذیل مثالی از ایجاد stored procedure به همراه with encryption و دیگری بدون encryption می باشد.CREATE PROCEDURE MTB_NoEncryption
AS
BEGIN
SELECT 'From MTB_NoEncryption'
END
GO
CREATE PROCEDURE MTB_WithEncryption WITH ENCRYPTION
AS
BEGIN
-- START: Properitary Business Logic
--
--
--
--
-- END: Properitary Business Logic
SELECT 'From ENCRYPTED Stored Procedure'
END
GO
اگر هر دو stored procedure را اجرا کنید، نتایجی مشابه با تصویر زیر را دریافت می کنید.
خب، حالا sp_helptext برای هر دو stored procedure اجرا کنید تا کدهای آنها را ببینید. با این روش هرگز نمی توانید کد stored procedure ای که Encrypt کرده اید را مشاهده کنید و به جای آن پیغام The text for object ‘MTB_WithEncryption’ is encrypted را دریافت خواهید کرد.
اگر درصدد باز کردن همین stored procedure رمزگذاری شده از طریق Object Explorer در SSMS باشید، باز هم با خطا مواجه خواهید شد.
در SQL Server Profiler یا دو Event، SP:StmtStarting و SP:StmtEnding به سراغ stored procedure ای که رمزگذاری کرده بودید بروید و خواهید دید که در خروجی - Encrypted text را دریافت خواهید کرد.
Encrypting Function (UDF)
خب، حالا به نحوه encrypt کردن Function در SQL Server خواهیم پرداخت. برای رمزگذاری function هم کافیست که گزینه WITH ENCRYPTION را همراه با CREATE FUNCTION در اسکریپت وارد کنید.در ادامه دو Function که یکی بدون ENCRYPTION و دیگری با ENCRYPTION است را خواهید دید:
CREATE FUNCTION MTB_fnNoEncryption
(
@value varchar(50)
)
RETURNS varchar(50)
AS
BEGIN
RETURN @value + ' - From Regular Function'
END
GO
CREATE FUNCTION MTB_fnWithEncryption
(
@value varchar(50)
)
RETURNS varchar(50) WITH ENCRYPTION
AS
BEGIN
-- START: Properitary Business Logic
--
--
--
--
-- END: Properitary Business Logic
RETURN @value + ' - From ENCRYPTED Function'
END
GO
حالا با استفاده از sp_helptext، درصدد دیدن کدهای هر دو Function باشید. درست همانطور که در stored procedure ایکه رمزگذاری شده بود و دیدن کد آن مقدور نبود، در اینجا هم با همین شرایط مواجه خواهید شد.
از طریق object explorer در SSMS هم نمی توانید کد Function را مشاهده کنید.
Encrypting Views
مشابه رمزگذاری stored procedure ها و function ها، encrypt و رمزگذاری View ها هم به همین منوال خواهد بود.فقط باید در اسکریپت CREATE VIEW از گزینه WITH ENCRYPTION استفاده کنید.
CREATE VIEW TestView WITH ENCRYPTION
AS
select * from Application.Countries
Go
Pros & Cons Of Using WITH ENCRYPTION
رمزگذاری با WITH ENCRYPTION مزایا و معایبی دارد.این یکی از ساده ترین روش برای پنهان کردن کد از دید سایرین است.
ولی شکستن این رمزگذاری امری ساده است و با یک جستجوی ساده در اینترنت برنامه های زیادیکه اینکار را انجام می دهند را می توانید پیدا کنید.
نمایش دیدگاه ها (1 دیدگاه)
دیدگاه خود را ثبت کنید: