نمایش نتایج 1 تا 11 از 11

نام تاپیک: كمي در مورد حفاظت فيزيكي و يا مكانيزم TDE - Transparent data Encryption

Threaded View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #1

    كمي در مورد حفاظت فيزيكي و يا مكانيزم TDE - Transparent data Encryption

    سلام
    از طرف دوستان عزيز سوالات مكرري در مورد حفاظت فيزيكي پرسيده مي شه. اول يه توضيح مختصر در مورد دو نوع حفاظت و سپس يه توضيح مشروح در مورد حفاظت فيزيكي مي دم.
    ببينين دو نوع حفاظت از اطلاعات داريم.
    الف - حفاظت از طريق كنترل دسترسي ها (يه جوري بگيم حفاظت نرم افزاري يا سيستمي)
    ب- حفاظت فيزيكي
    قسمت اول كه همون تعريف لاگين ها و يوزر هاست. اين قسمت الزام كار با DB ها هم هست . چرا كه بدون دسترسي امكان مشاهده اطلاعات و كار با اونها وجود نداره.
    نوع دوم حفاظت فيزيكي است. يعني حفاظت از فايل ها. اين موضوع به هيچ طريقي با ابزار الف يا همون لاگين ها و يوزر ها تامين نمي شود.
    چرا كه اگه كسي به فايل ها دسترسي پيدا كرد و امكان داشت كه اونو روي سرور ديگري Attach كنه ، سيستم به لاگين و يوزر ها اصلا نگاه نمي كنه و اونو در سرور جديد بالا مي ياره.
    اما چه كنيم كه حفاظت فيزيكي هم داشته باشيم.
    -------------------------------------------------

    Data Encryption
    مقدمه
    يكي از مهمترين نگراني (concern) هاي يك DBA درز كردن اطلاعات (data leak) است. براي مقابله با آن كليه دسترسي‌ها در سطح كاربري تنظيم و مكررا مرور مي شود. اما به يك سطح حفاظت بيشتر نيز نياز است. حافظت فيزيكي !! بله درست است. بايد فايل هاي داده اي و لاگ sqlserver نيز محافظت شوند.
    براي اين منظور در sql server 2008 امكان جديدي با نام Transparent Data Encryption (TDE) اضافه شده است.
    در اولين نگاه بايد بدانيم كه encryption چيست ؟
    encryption يعني ترجمه و رمز كردن اطلاعات از طريق يك رمزنگار و يا يك الگوريتم بصورتيكه كسي نتواند اطلاعات رابخواند مگر اينكه كليد را داشته باشد.
    دو نوع كليد براي اين عمليات وجود دارد :
    1- symmetric : يعني اينكه يك كليد براي رمز نگاري و رمز گشايي استفاده مي شود.
    2- asymmetric : يعني يك كليد (Privat key) براي رمز نگاري و كليد دوم (Public key) براي رمز گشايي.

    TDE چيست ؟
    TDE يك سطح از Encryption بانك اطلاعاتي است كه هم فايل داده و هم فايل Log را رمزنگاري مي كند.
    اين تعريف در واژه نامه ميكروسافت به اين ترتيب آمده است :
    TDE عمليات رمز نگاري و رمزگشايي را بصورت هم‌زمان و هرزمان (Realtime) روي فايل هاي داده و لاگ انجام مي دهد. براي رمزنگاري از database encryption key (DEK) استفاده مي كند. DEK يك كليد از نوع Symetric است كه خودش توسط يك certificate محافظت مي شود كه اين certificate در بانك اطلاعاتي master ذخيره شده است.
    يكي از مزاياي مهم TDE اين است كه براي فعال سازي و استفاده از آن نبايد به برنامه كاربردي (application) خود دست بزنيد.
    Sql server اين عمليات را از طريق يك share Lock انجام ميدهد.

    قبل از اينكه مشتاق استفاده از اين روش بشويد حتما تا انتهاي مقاله پيش برويد و از خطرات و اشكالات آن هم مطلع شويد.

    چگونه از TDE استفاده كنيم ؟
    4 مرحله براي setup كردن آن وجود دارد :
    1- ايجاد يك Master Key
    2- ايجاد يا دريافت يك Certificate Protected توسط master key
    3- ايجاد يك database Key و protect كردن آن توسط Certificate
    4- Set كردن يك ديتابيس به منظور استفاده از Encryption
    اكنون مثال هاي اجرايي از اين مكانيزم : (دقت شود هيچ موقع مثال ها را براي بار اول روي بانكهاي اصلي خود اجرا نكنيد. )
    مرحله اول : ايجاد Master Key
    اين كليد در بانك اطلاعاتي master ايجاد مي شود. فقط قبل از ايجاد بايد مطمئن شويد كه قبلا ايجاد نشده است.
    USE master;
    GO
    SELECT * FROM sys.symmetric_keys WHERE name LIKE '%MS_DatabaseMasterKey%'
    GO
    اگر نتيجه اين query ركوردي بود، به اين معني است كه شما قبلا يك master key ايجاد كرده ايد.
    اگر master key نداشته باشد:
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '12345';
    GO

    مرحله دوم : ايجاد يك certificate توسط Master Key است
    قبل ازايجاد آن چك مي كنيم كه با نام مورد نظر ما قبلا certificate ايجاد شده يا نه ؟
    SELECT * FROM sys.certificates where [name] = 'Your Certificate Name'
    GO
    اكنون براي ايجاد آن اقدام مي كنيم.
    CREATE CERTIFICATE MyTDECert WITH SUBJECT = 'My TDE Certificate'
    GO
    اگر select بالا را اجرا كنيم، نتيجه ركوردي است كه ستون نام آن MyTDECert مي باشد.
    مرحله سوم : ايجاد يك Encryption Key و Protect كردن آن توسط certificate مي باشد.
    اين مرحله حساس است و حتما بايد مراقب باشيد. (روي بانك اطلاعاتي تستي بانام AdventureWorks)
    Use AdventureWorks
    GO
    CREATE DATABASE ENCRYPTION KEY
    WITH ALGORITHM = AES_128
    ENCRYPTION BY SERVER CERTIFICATE MyTDECert
    GO

    بعد از اجراي اين دستور چنين پيغامي مي گيريد كه مهم است و بايد به دقت آنرا بخوانيد :
    Warning: The certificate used for encrypting the database encryption key has not been backed up. You should immediately back up the certificate and the private key associated with the certificate. If the certificate ever becomes unavailable or if you must restore or attach the database on another server, you must have backups of both the certificate and the private key or you will not be able to open the database
    اين موضوع توضيح داده خواهد شد.
    اكنون مرحله آخر :
    مرحله چهارم : فعال كردن Encryption در بانك اطلاعاتي است.
    ALTER DATABASE AdventureWorks
    SET ENCRYPTION ON
    GO

    در صورتيكه بانك شما سنگين باشد اين مرحله قدري طول خواهد كشيد.
    بعد از آن شما به اين اسكريپت پي خواهيد برد كه آيا بانك اطلاعاتي شما رمزنگاري شده است.
    SELECT DB_NAME(database_id) AS DatabaseName, * FROM sys.dm_database_encryption_keys
    نتيجه براي يك db دو ركورد است. يكي خودش يكي tempdb.

    حالا سوال ؟
    آيا Encryption واقعا كار مي كنه ؟
    اين مراحل رو براي تست دنبال مي كنيم.
    1- از بانك اطلاعاتي Encrypt شده يك Backup مي گيريم.
    BACKUP DATABASE [AdventureWorks] TO DISK = N'D:\BackUp\AdventureWorks_Encrypted.bak' WITH NOFORMAT, NOINIT,
    NAME = N'AdventureWorks-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10
    2- خوب مرحله بعد اينه كه اين Backup رو روي يك سرور ديگه و يا يك Instance ديگه روي همين سرور Restore كنيم. در اين مثال روي يك سرور ديگه Restore مي كنيم.
    RESTORE DATABASE [AdventureWorks]
    FROM DISK = N'D:\AdventureWorks_Encrypted.bak'
    WITH FILE = 1,
    MOVE N'AdventureWorks' TO N'D:\BackUp\AdventureWorks.mdf',
    MOVE N'AdventureWorks_log' TO N'D:\BackUp\AdventureWorks_log.ldf',
    NOUNLOAD, STATS = 10
    GO
    اگه Encription درست انجام شده باشه در اين مرحله بايد خطاي زير رو بگيريد :
    Msg 33111, Level 16, State 3, Line 1
    Cannot find server certificate with thumbprint
    Msg 3013, Level 16, State 1, Line 1
    RESTORE DATABASE is terminating abnormally.
    حالا براي اطمينان بيشتر از مسير ديگه‌اي ميريم. يعني Attach & Detach . ابتدا فايل هاي mdf , ldf رو به سرور ديگه منتقل مي كنيم و با استفاده از دستور زير اونو Attach مي كنيم.
    CREATE DATABASE [AdventureWorks] ON
    ( FILENAME = N'D:\BackUp\AdventureWorks.mdf'),
    ( FILENAME = N'D:\BackUp\AdventureWorks_log.ldf')
    FOR ATTACH
    درسته !!!! يك خطا مثل همون قبلي مي گيريد.

    3- راه برگردوندن يك بانك اطلاعاتي Encrypt شده در يك ديتابيس ديگه :
    *** اينه كه روي sql server مقصد هم همون Certificate رو اعمال كنيد. ***
    براي اين كار دو مرحله وجود داره :
    1-3- Backup گرفتن از certificate سرور اصلي
    Use Master
    GO
    BACKUP CERTIFICATE MyTDECert TO FILE = 'D:\MyTDECert.cert'
    WITH PRIVATE KEY
    (
    FILE = 'D:\EncryptPrivateKey.key',
    ENCRYPTION BY PASSWORD = 'TryToUseOnlyStrongPassword'
    )
    GO

    2-3- Restore كردن آن روي سرور مقصد
    براي اين كار اول بايد master Key رو روي سرور مقصد ايجاد كنيم. بعد بريم سراغ certificate
    USE [master]
    GO
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '12345';
    GO
    //*--------------------------------------------*
    CREATE CERTIFICATE MyTDECert
    FROM FILE = 'D:\MyTDECert.cert'
    WITH PRIVATE KEY (
    FILE = 'D:\EncryptPrivateKey.key'
    , DECRYPTION BY PASSWORD = 'TryToUseOnlyStrongPassword'
    )

    4- حالا مي تونيم دوباره دستور restore رو اعمال كنيم.
    RESTORE DATABASE [AdventureWorks]
    FROM DISK = N'D:\AdventureWorks_Encrypted.bak'
    WITH FILE = 1,
    MOVE N'AdventureWorks_data' TO N'D:\BackUp\AdventureWorks_Data.mdf',
    MOVE N'AdventureWorks_log' TO N'D:\BackUp\AdventureWorks_Log.ldf',
    NOUNLOAD, REPLACE, STATS = 10
    GO
    نكات مهم
    نكاتي كه بايد در مورد Encryption به خاطر بسپاريد.
    1- اگر بانك اطلاعاتي شما File Stream دارد و يا ReadOnly File group داريد، اين روش محافظت موفقيت آميز نخواهد بود.
    • دراجراي رمزنگاري File stream با خطايي برخورد نمي كنيد اما به واقع آن فايل هايي كه روي هارد ذخيره شده اند ، كد نميشوند.
    2- اگر شما Plan ي از نوع Maintenance/Recovery/Warm Standby داشته باشيد بايد برنامه خود را مرور كنيد و سروري كه روي آن Restore انجام مي دهيد حتما Certificate داشته باشد.
    3- Backup از certificate حتما داشته باشيد ، چون اگر ويندوز شما از بين برود ديگر Backup هاي شما بدون backup از certificate بدرد بخور نخواهدبود.

    مشكلات فعال شدن TDE
    1- Tempdb
    • به دليل اينكه اين بانك اطلاعاتي هم رمزنگاري مي شود، كارايي سرور پايين مي آيد.
    2- رمزنگاري به شدت روي Compressed Backup تاثير مي گذارد.
    • مكانيزم Compressed Backup بسيار مفيد است كه در زمان فعال شدن Encryption، درجه فشرده سازي بسيار كم مي شود.
    3- باقي ماندن ارجاعي كه هميشه به يك certificate اشاره مي كند.
    • به اين مفهوم كه حتي بعد از متوقف كردن Encryption، باز در هنگام Restore و با وجود موفقيت پيغامي مبني بر نبودن certificate ميدهد.

    موفق باشيد
    لطفا از تجربيات و نظريات خودتون راجع به اين موضوع بنويسيد.
    آخرین ویرایش به وسیله esteghamat : چهارشنبه 28 تیر 1391 در 14:42 عصر

تاپیک های مشابه

  1. سوال در مورد : Bussines skines ، Report builder و حفاظت
    نوشته شده توسط hr110 در بخش برنامه نویسی در Delphi
    پاسخ: 2
    آخرین پست: پنج شنبه 29 اردیبهشت 1384, 21:51 عصر
  2. سوال در مورد Extended Stored Procedure
    نوشته شده توسط محسن در بخش SQL Server
    پاسخ: 12
    آخرین پست: چهارشنبه 26 اسفند 1383, 01:23 صبح
  3. یک تجربه (در مورد تاریخ)
    نوشته شده توسط (امید) در بخش مباحث عمومی دلفی و پاسکال
    پاسخ: 3
    آخرین پست: چهارشنبه 28 مرداد 1383, 12:31 عصر
  4. سوال در مورد کد اس کیو ال
    نوشته شده توسط ghaum در بخش T-SQL
    پاسخ: 2
    آخرین پست: سه شنبه 06 خرداد 1382, 20:19 عصر
  5. یک سوال در مورد کد sql
    نوشته شده توسط ghaum110 در بخش T-SQL
    پاسخ: 1
    آخرین پست: چهارشنبه 14 اسفند 1381, 16:29 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •