PDA

View Full Version : سوال: امنیت دیتابیس های SQL



pouria_bayat
شنبه 29 شهریور 1393, 14:37 عصر
سلام دوستان آیا راهی عملی برای محافظت از دیتابیس های Sql وجود داره که نشه روی سیستم دیگه که Sql Server Managment Studio وجود داره دیتابیس مربوطه رو باز کرد؟ در مورد گذاشتن پسورد خیلی تحقیق کردم ولی باز دیتابیس روی یک سیستم دیگه باز میشه. خیلی به کمکتون نیاز دارم لطفا دریغ نکنید اگر چیزی میدونید. ممنونم.:ناراحت:

Davidd
شنبه 29 شهریور 1393, 14:46 عصر
سلام. اگه منظورت اينه كه كسي نتونه ديتايبس از سيستمت ببره و يه جا ديگه باز كنه در مورد TDE (Transparent Data Encryption) جستجو كن. روال كار به اين صورته كه يك كليد در ديتابيس master ايجاد ميكني كه فايل ديتابيس با اين كليد رمز ميشه. براي انتقال ديتابيس به سرور ديگه به هر طريقي (بكاپ يا انتقال ) بايد از اين كليد بكاپ گرفته بشه و در مقصد restore بشه وگرنه ديتابيس باز نميشه.

pouria_bayat
شنبه 29 شهریور 1393, 17:05 عصر
اول از همه بابت جوابت تشکر کنم لطف کردی وقت گذاشتی.
تا جایی که من سرچ کردم تمامی عملیات بر اساس اجرای Query هست و در اخر ست کردن کلید بر روی دیتابیس.
اما : در حال حاظر دیتابیس رو خود برنامه میسازه و اطلاعاتش رو از کاربر میگیره به این صورت که برنامه نوشته شده توسط برنامه نویس روی سیستم کاربر نصب میشه و در هنگام نصب Sqlexpress نیز نصب میشه و بعد از اجرای برنامه دیتابیس ساخته میشه از طریق دستور CreateDatabase من میخواهم بعد از ساخت دیتابیس از طریق نرم افزار این امکان وجود نداشته باشه که دیتابیس توسط Sql Server Managment باز بشه و دچار تغییر بشه. میخواهم فقط از طریق برنامه قابل باز شدن باشه به نظرت اگر از TDE استفاده کنم و دیتابیس رو زمان نصب نرم افزار به برنامه اضافه کنم تا دیگه برنامه خودش اینکارو نکنه مشگل من حل میشه؟ و اینکه دیتابیس روی سیتم جدید از طریق برنامه قابل باز شدن است یا خیر؟

Davidd
یک شنبه 30 شهریور 1393, 07:55 صبح
خواهش ميكنم.
ميشه بعد از دستورات ايجاد ديتابيس دستورات ايجاد كليد و certificate و فعال كردن TDE در ديتابيس مورد نظر از طريق كوئري انجام داد. اگه روي همون سيستم SSMS نصب باشه ميتونه ديتابيس ببينه چون كليد ساخته شده در ديتابيس مستر وجود داره ولي روي سيستم ديگه چه از طريق SSMS و چه از طريق برنامه باز نميشه چون فايل هاي داده و لاگ رمز شده و كليدش وجود نداره.
براي جلوگيري از باز شدن ديتابيس روي همون سيستم بايد از مجوزهاي امنيتي sql استفاده كني. نميدونم روي نسخه express تا چه حد ميشه اين كارارو انجام داد.

pouria_bayat
دوشنبه 31 شهریور 1393, 11:05 صبح
ممنونم دوست عزیز، یک نمونه از سورس کدی که بتونم ازش راهنمایی بگیرم در مورد ایجاد کلید و و certificate و فعال كردن TDE در ديتابيس دارید در اختیارم بزارید؟ :تشویق: اما در مورد مجوزهای امنیتی که گفتید هم اگر نمونه مثالی عملی باشه لطف بزرگی کردید.

pouria_bayat
دوشنبه 31 شهریور 1393, 15:05 عصر
تحقیق که کردم به این نتیجه رسیدم که TDE فقط از طریق خود SQL SERVER MANAGMENT این امکان رو میده و ازطریق برنامه این امکان وجود نداره آیا درسته؟ اگر درسته پس این روش برای برنامه هایی که با cONNECTION STRING استفاده می کنند تا به دیتابیس وصل بشن چه ado و چه linq نمی تونن از این روش استفاده کنند.

http://stackoverflow.com/questions/13950451/tde-enabled-database-connection-string-in-ado-net-using-c-sharp

سوالی که پیش میاد آیا واقعا هیچ راهی برای حفاظت از دیتابیس های SQl نیست؟!!!
مدتی پیش فکر یکردم که آیا راهی وجود داره تا بشه دیتابیس SQl رو توی فایلی دیگر قرار داد به صورت Decrypt مثل فایل های rar بعد اکسترکت کرد و توی حافظه اصلی اونو اتچ کرد به نظرتون شدنی هستش؟ اگر راهی سراغ دارید بی صبرانه منتظرم و اگر هم دنبال این موضوع بودید و نشده اطلاع بدید بیشتر از این وقت نزارم.

Davidd
دوشنبه 31 شهریور 1393, 15:53 عصر
ممنونم دوست عزیز، یک نمونه از سورس کدی که بتونم ازش راهنمایی بگیرم در مورد ایجاد کلید و و certificate و فعال كردن TDE در ديتابيس دارید در اختیارم بزارید؟ :تشویق: اما در مورد مجوزهای امنیتی که گفتید هم اگر نمونه مثالی عملی باشه لطف بزرگی کردید.
اينجا به همراه كد توضيح داده شده. http://barnamenevis.org/archive/index.php/t-351819.html
در كار كردن با ديتابيس TDE هيچ تفاوتي با ديتابيس هاي ديگه وجود نداره فقط هنگام انتقال به سرور ديگه نياز به certificate و پسوردش هست. بنابراين از طريق كانكشن استرينگ هم ميشه باهاش كار كرد اما من مطمئن نيستم كه در نسخه express ميشه از TDE استفاده كرد يا نه.
در مورد مجوزهاي امنيتي هم، نميشه كاري كرد كه هيچ كس نتونه به سرور وصل بشه. حداقل ادمين سيستم ميتونه وصل بشه.
اگه اطلاعات مهمي در ديتابيس وجود داره ميتوني اطلاعات رمز كني و ذخيره كني. توابع رمز گذاري در خود SQL وجود داره.