بهترین روش برای محافظ ار داده ها در دیتابیس microsoft sql server
سلام دوستان برای محافظت کردن از داده ها در microsoft sql server چیست ؟
محافظت به این معنا که در صورت هک کردن دیتابیس هکر نتواند به اطلاعات دسترسی داشته باشد
من برای اینکار اطلاعات را در سمت برنامه ام رمزگذاری میکنم بعد در دیتابیس به صورت رمزشده ذخیره می کنم
این کار مزیتی که دارد اینکه:
داده ها سمت برنامه رمزنگاری و رمزگشایی میشوند و در صورت هک شدن اطلاعات حتمالا هکر نتواند رمزگشایی کند
نقات ضعف اینکه برای هرکاری باید اطلاعات را رمزگشایی و رمزنگاری مجدد کنم که این کار باعث میشه سرعت سایت به شد پایین بیاد
آیا راه حلی هست که من داده هایم را رمزگذاری شده در دیتابیس ذخیره کنم بدون اینکه در برنامه ام این کار را انجام دهم ؟
4 پاسخ
راستش را بخواهید من زیاد با sql به صورت T-SQL کار نکردم من بیشتر با Entityframwork کار کردم این دستورات را باید در SQL Server Management Studio بنویسم ؟
سلام
دوست عزیزم جناب آقای حسین احمدی من مراحلی را که گفتید انجام دادم ولی در مرحله شماره 4 در دستور دومش که مربوط به Update هست کد زیر را وارد می کنم.
Update Customers set FullName = ENCRYPTBYKEY(KEY_GUID('SymKey1'),FullName)
که ستون FullName از نوع nchar(10) هست و با خطای زیر روبرو میشم.
Msg 8152, Level 16, State 5, Line 17
String or binary data would be truncated.
The statement has been terminated.
و وقتی دستور زیرا مینویسم
Update Customers set Fi = ENCRYPTBYKEY(KEY_GUID('SymKey1'),Fi)
که ستون Fi از نوع int هست و با خطای زیر روبرو میشم.
Msg 8116, Level 16, State 1, Line 17
Argument data type int is invalid for argument 2 of EncryptByKey function.
علت چیست!؟
و چگونه باید این مشکل را حل کنم. تا بتونم بقیه موارد را ادامه بدهم.
باتشکر فراوان
سلام دوست عزیز، شما می تونید داخل SQL Server عملیات Encryption اطلاعات رو انجام بدید. فرض کنید جدولی دارید با نام Customers که ستونی با نام Email دارید و میخوایید این ستون Encrypt بشه، برای اینکار به ترتیب مراحل زیر رو انجام بدید:
1. اول از همه باید master key رو به صورت زیر ایجاد کنید:
create master key encryption by password = 'p@ssw0rd'
2. بعد از ایجاد master key باید یک certificate ایجاد کنید:
create certificate Cert1 with SUBJECT = 'Customer Email Address'
3. بعد از ایجاد Master key و Certificate باید یک Symmetric Key به صورت زیر ایجاد کنید:
create symmetric key SymKey1 with algorithm=AES_256 encryption by certificate Cert1
4. بعد از انجام مراحل گفته شده می تونید با باز کردن کلید ایجاد شده اطلاعات داخل جدول مورد نظرتون رو Encrypt کنید، فقط دقت کنید که بعد از رمزنگاری داده ها حتماً کلید باز شده رو ببندید:
open symmetric key SymKey1 decryption by certificate Cert1
Update Customers set Email = ENCRYPTBYKEY(KEY_GUID('SymKey1'),Email)
CLOSE SYMMETRIC KEY SymKey1;
تو مرحله بعدی هر موقع نیاز بود که از اطلاعات خروجی بگیرید، کافیه کلید رو مجدد باز کنید و کوئری رو به صورت زیر اجرا کنید که اطلاعات رمزگشایی بشه و نمایش داده بشه:
open symmetric key SymKey1 decryption by certificate Cert1 select Id,FirstName,LastName,CONVERT(nvarchar(200),DECRYPTBYKEY(Email)) Email from Customers CLOSE SYMMETRIC KEY SymKey1;
با توجه به موارد گفته شده می تونید بحث به روز رسانی اطلاعات و درج رو هم مطابق شیوه گفته شده پیاده سازی کنید.
بله، شما Management Studio رو باز کنید و دستورات بالا رو تو پنجره Query Editor بنویسید. فقط به این نکته دقت کنید که داده های رمز شده زمان کوئری گرفتن باید Decrypt بشن.