# پایگاه‌های داده > SQL Server > امنیت در SQL Server >  راهکار صحیح برای اطمینان از امنیت بانک اطلاعاتی

## بهرام 1368

با عرض سلام و آرزوی داشتن لحظاتی خوش ...

بنده اکثر مباحث در مورد امنیت بانک اطلاعاتی SQL Server که در این انجمن مطرح شده است را مطالعه کردم؛ اما متأسفانه همچنان ابهاماتی در ذهنم وجود دارد. ممنون میشوم اگر پاسخ دهید.

هدف کلی: قرار است نرم افزاری تحت شبکه طراحی و تولید شود به طوری که هنگام تحویل به مشتری مطمئن باشیم کسی نمی تواند به ساختار، جداول و محتوای بانک اطلاعاتی ضمیمه شده به برنامه دسترسی پیدا کند.
آن گونه که در انجمن ها بحث شده، دسترسی به محتوای بانک اطلاعاتی می تواند از همان کامپیوتر باشد (به عنوان مثال کاربر مدیر با نصب SQL Server Management بانک اطلاعاتی را باز کند) یا اینکه دیتابیس را سرقت نماید و از روی یک کامپیوتر دیگر این دسترسی غیرمجاز را انجام دهد.

با تلاش هایی که بنده انجام دادم، ظاهراً ایجاد این امنیت به سادگی مطرح کردن آن نیست. یعنی مانند Access نمی توانیم رمز عبور برای بانک اطلاعاتی قرار دهیم (صرف نظر از اینکه Access را به عنوان بانک اطلاعاتی قبول داشته باشیم یا خیر). احتمالاً تا اینجا با نظر من موافق هستید؛ اگر تناقضی وجود دارد مطرح بفرمایید.

من در مورد Schema، Role و User در SQL Server مطالعاتی داشتم اما متأسفانه نتوانستم با آنها امنیت مورد نظر را تأمین کنم. همچنان با این مشکل مواجه هستم که هر کاربر حاضر در گروه مدیران ویندوز و یا SA می تواند به محتویات بانک اطلاعاتی من دسترسی داشته باشد.

سؤال اول: آیا با غیرفعال کردن SA این امنیت تأمین می گردد؟

سؤال دوم: آیا با ایجاد یک Named Instance اختصاصی این امنیت تأمین می گردد؟

سؤال سوم: آیا رمزگذاری اطلاعات (مثل روش TDE) کمکی به این موضوع میکند؟ بهتر نیست که تلاش کاربر برای دسترسی غیرمجاز با یک رمز عبور قوی متوقف شود تا اینکه با اطلاعات رمزگذاری شده مواجه شود؟ گاهی اوقات امنیت ساختار بانک اطلاعاتی که برای آن زحمات زیادی کشیده شده از اطلاعات ذخیره شده در آن مهمتر است؛ بنابراین راه حل امنیتی جامعی باید وجود داشته باشد تا همه جوانب آن سنجیده شود.

سؤال چهارم: آیا به طور کلی امنیتی که در ذهن من وجود دارد، در SQL Server 2012 قابل پیاده سازی است یا اینکه موضوع پیچیده تر از آن است که من تصور میکنم؟

با تشکر

----------


## حمیدرضاصادقیان

سلام.
شما با استفاده از TDE میتونید امنیت رو در سطح کل دیتابیس برقرار کنید به این شکل که حتی اگر فایلها جابجا شوند یا Backup داشته باشند باید Master Key و Certificate و کلیدی که Certificate شما با اون رمزنگاری شده رو داشته باشند تا بتونند از دیتابیس استفاده کنند در غیر اینصورت استفاده از اون غیر ممکنه.
برای اطلاعات تکمیلی پیشنهاد میکنم این کتاب رو مطالعه کنید.

----------


## ALM123456

با سلام خدمت همه دوستان


امنيت در ديتابيس SQL شامل چندين حوزه كاري است

حوزه امنيت شبكه
حوزه امنيت در سيستم عامل
حوزه امنيت در سرويس SQL
حوزه امنيت در سطح سرور
حوزه امنيت در سطح ديتابيس
حوزه امنيت در ستون داده


در هر حوزه يكسري اقدامات با توجه به رعايت اصول امنيت داده ها ( يكپارچگي ، صحت ، محرمانگي و ... ) و همچنين موارد گزارش شده به عنوان آسيب پذيري سرويس SQL  بايد انجام شود


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

----------


## madmajid

با تشکر فراوان از موضوع بسیار بسیار کاربردی آقای *بهرام 1368* 	 و عرض تاسف از اینکه هیچکس نه منظور ایشون رو فهمید و نه اطلاعات درستی داد !
منهم دقیقا مشکل ایشون رو دارم ولی با حجم زیاد مطالب امینتی sql server مواجه هستم و هنوز نفهمیدم چطوری باید جلوی دیده شدن بانک اطلاعاتیمو توسط
windows authentication در management studio بگیرم ! حالا sa پیشکش .

----------


## madmajid

این روش هم بد نیست ! شما فقط یک لاگین خواهید داشت با username و password خودتون .
windows authentication هم حذف هستش و در نتیجه کسی بدون پسورد نمیتونه بیاد داخل management studio
مراجعه کنید به :
https://barnamenevis.org/showthread.p...QL-Server-2008

----------


## jojoyejojo

> با عرض سلام و آرزوی داشتن لحظاتی خوش ...
> 
> بنده اکثر مباحث در مورد امنیت بانک اطلاعاتی SQL Server که در این انجمن مطرح شده است را مطالعه کردم؛ اما متأسفانه همچنان ابهاماتی در ذهنم وجود دارد. ممنون میشوم اگر پاسخ دهید.
> 
> هدف کلی: قرار است نرم افزاری تحت شبکه طراحی و تولید شود به طوری که هنگام تحویل به مشتری مطمئن باشیم کسی نمی تواند به ساختار، جداول و محتوای بانک اطلاعاتی ضمیمه شده به برنامه دسترسی پیدا کند.
> آن گونه که در انجمن ها بحث شده، دسترسی به محتوای بانک اطلاعاتی می تواند از همان کامپیوتر باشد (به عنوان مثال کاربر مدیر با نصب SQL Server Management بانک اطلاعاتی را باز کند) یا اینکه دیتابیس را سرقت نماید و از روی یک کامپیوتر دیگر این دسترسی غیرمجاز را انجام دهد.
> 
> با تلاش هایی که بنده انجام دادم، ظاهراً ایجاد این امنیت به سادگی مطرح کردن آن نیست. یعنی مانند Access نمی توانیم رمز عبور برای بانک اطلاعاتی قرار دهیم (صرف نظر از اینکه Access را به عنوان بانک اطلاعاتی قبول داشته باشیم یا خیر). احتمالاً تا اینجا با نظر من موافق هستید؛ اگر تناقضی وجود دارد مطرح بفرمایید.
> 
> ...



سلام.روزتون بخیر.
من هم این مشکل شما رو دارم می خواستم ببینم شما راه حلی براش پیدا کردین 
اینجا که من چیزی پیدا نکردم
ممنون میشم زود جواب بدین

----------


## alishanbedi

*میتونید در مورد* *SQL Server  Encryption منابع ازاد معرفی کنید*

----------


## esteghamat

سلام
ببينيد همانطور كه آقاي صادقيان گفتند تقريبا هيچ راهي به جز كد كردن اطلاعات (Encryption)  نداريد. حتي راهي كه آقاي madmajid گفتند هم مردود است. 
فرض مي كنيم شما روي سرور يا دستگاه خودتان  همه يوزرها (ويندوزي يا غيره) را حذف كنيد و فقط يكي با نام كاربري و رمز خاص بگذاريد. 
باز اگر كسي Man. studio  نصب كند، و آن شخص بتواند از اين بانك شما Backup تهيه كند (به هر نحو ، با همان نام كاربريو رمز شما و يا با كپي فايل هاي بانك اطلاعاتي در زمانيكه سرويس sql خاموش است) مي تواند اين Backup يا فايل ها را به دستگاه ديگري منتقل كند و Restore كند و خودش هر نام كاربري كه دلش بخواهد روي آن بگذارد و داده هاي شما را  بخواند.
پس اگر شما امنيت Backup و يا فايل‌هاي بانك اطلاعاتي خود را نتواند بصورت ويندوزي و يا Sqlي برقرار كنيد، هيچ راهي به جز كد شدن اطلاعات از خوانده شدن آنها در سرور ديگر نمي تواند جلوگيري كند. 
موفق باشيد

----------

