ورود

View Full Version : استفاده از TDE برای فیلدهای غیر متنی و عددی



Ehsan-MT
چهارشنبه 15 بهمن 1393, 18:08 عصر
با سلام

چگونه می توان کلیه فیلدهای داخل جدول را کد و دیکد کرد.
از TDE ظاهرا فقط فیلدهای با تایپ varchar, nvarchar , binary میشه استفاده کرد و بروی فیلدهای عددی قابل اعمال نیست.

با تشکر و سپاس

Mousavmousab
پنج شنبه 16 بهمن 1393, 13:56 عصر
سلام

چه دلیلی وجود داره که ما نام فیلد جدول را code و Decode کنیم؟

اگر میشه بیشتر توضیح بدین !
با تشکر

Ehsan-MT
جمعه 14 فروردین 1394, 21:23 عصر
اطلاعات داخل فیلدها باید کد بشن نه نام فیلد ها

مهدی نان شکری
شنبه 15 فروردین 1394, 09:44 صبح
با سلام
TDE یا همان Transparent Data Encryption بر روی Page های داده ای پایگاه داده انجام می پذیرد و این عمل به صورت background و اتوماتیک در هنگام خواندن و نوشتن اطلاعات بر روی دیسک اتفاق می افتد.
پس شما هیچ وقت اطلاعات را در هنگام Select به صورت رمز شده ملاحظه نمی کنید. به عبارت دیگر این ارتباطی با فیلد ها و مقادیر آن به صورت بصری نداشته و کاربرد آن زمانی است که در صورت سرقت پایگاه داده ، دسترسی به اطلاعات آن برای کسی که کلید های آن را نداشته باشد مقدور نباشد.
موفق باشید.

soheileee
دوشنبه 24 فروردین 1394, 01:26 صبح
سلام.
منظور دقیقت از کد کردن برام مبهمه.
دلیل اینکه می خوای این کار رو بکنی مهمه چون روشهای مختلفی براش وجود داره.

فرض کنیم datatype مورد نظر برای کد شدن varchar باشه.
یک روش ساده ش اینه که داده های یک column رو به varbinary تبدیل کنی. بذار اسمش رو بگذاریم کدگذاری.
و بعد می تونی زمان کد برداری دوباره به varcvhar تبدیلش کنی.
می شه یه چیزی مثل این:



SELECT CAST(YOUR_COLUMN AS VARBINARY(MAX)) AS ENCODED_COLUMNS FROM YOUR_TABLE
SELECT CAST(CAST(YOUR_COLUMN AS VARBINARY(MAX)) AS varchar(MAX)) AS DECODED_COLUMNS FROM YOUR_TABLE

اگه منظورت این باشه که داده ها در زمان Data Entry برات Code بشن، اونوقت زمان Insert کردن می تونی convertion به varbinary رو انجام بدی و بعد زمان خوندن دیتا ها اونا رو به varchar تبدیل کنی. در این صورت باید datatype رو برای ستونی که قراره دیتاهای کد شده رو نگهداری کنه از نوع varbinary در نظر بگیری.
خوب این روش عملاً security رو تأمین نمی کنه! چون فقط یه تبدیل ساده هست و از دید تخصصی کار خاصی در جهت تأمین Security صورت نگرفته.
چون اگه کسی از back door بتونه به دیتاها دسترسی داشته باشه، همه چیز رو عملاً داره و با یه CAST ساده، عیناً مثل خط دوم اسکریپت بالا می تونه به دیتاها دسترسی داشته باشه.

اما اگه بخوای Encryption روی دیتا ها انجام بدی، اونوقت باید از روشهایی مثل Symmetric Encryption استفاده کنی.
این روش خوب مسلماً پیچیده تره.
مثلاً باید ببینی که اگه Master Key Encryption وجود نداره اونو بسازی و با یه پسورد پیچیده secure ش کنی.
بعد باید یه Certificate بسازی و بعدش یه Symmetric Key بسازی و با اون Certificate انکریپتش کنی.
مرحله بعدی اضافه کردن یه Column به جدول اصلی هست که داده های Encrypt شده رو توش نگه داری کنه.
بعد دیتا ها رو با استفاده از Symmetric key انکریپت می کنی و تمام.
برای خوندن اطلاعات هم باید با استفاده از همون Symmetric key که ساختی دیتا ها رو Decrypt کنی.

مثال خوبش رو می تونی توی BOL پیدا کنی اینم لینکش:
https://msdn.microsoft.com/en-us/library/ms179331.aspx

روش دیگه ش استفاده از Hashbytes هست که البته کاربردش متفاوت هست.
چون hash یه جور کدگذاری یک طرفه ست و دیگه نمی تونی دیتاهای اصلی رو بازیافت کنی.
استفاده از این روش زمانی توصیه می شه که شما اصل دیتا ها رو در جایی مطمئن و امن داشته باشی، بعد اونها رو با hashbytes کدگذاری می کنی و در جای دیگری مثلاً یه database دیگه ذخیره ش میکنی. حالا روی این database جدید که روش فقط اطلاعات hash شده رو داری، به کاربران دسترسی می دی. در این روش end user اصلاً به Database اصلی دسترسی نداره و اگه بخواد یه زمانی به روشهایی غیر از آنچه شما می خوای به اطلاعات دسترسی داشته باشه، اطلاعاتی که بهش دسترسی داره بی معنی و غیر قابل استفاده هست.
حالا برای اینکه خودت بتونی اطلاعات hash شده رو بازیافتی کنی تنها راهی که داری اینه که دیتاهای موجود روی databaseاصلی که hash نشدن رو با hashbytes کد کنی و با دیتاهای موجود در database دوم که دیتاهای hash شده رو ذخیره کرده مقایسه کنی، اگه دیتا ها موجود بود که هیچی، اگه نبود باید دیتاهای جدید رو hash کنی و بریزیش توی دیتا بیس دومی.

کلاً این رشته سر درازی داره، برای همین مهمه که ببینی واقعاً برای چی لازمه که دیتاها رو کد کنی.

اما TDE خوب همونطور که بالا توضیح دادن خیلی خوب امنیت دیتا رو در سطح Media تأمین می کنه و از چشم کاربر کاملاً Transparent هست. یعنی کاربر به هیچ وجه متوجه نمی شه که چیزی انکریپت یا دیکریپت شده باشه.
اما خوب، TDE فقط در نسخه Enterprise وجود داره و اگه از نسخه های دیگه مثل Express یا Standard استفاده کنی این گزینه در دسترس نیست.

امیدوارم کمکی کرده باشم!