با سلام. مدتها بود دنبال راهکاری بودم که این امکان رو برای من فراهم کند تا بتوانم یک User را به یک دیتابیس وصل کنم و وقتی کاربر مد نظر لاگین میکند تنها بتواند دیتابیس خودش را ببیند و نه لیست تمام دیتابیسهای موجود روی سرور را. این اشکال در نزدیک به 99.99٪ از هاستینگهای ایرانی که امکان اتصال به دیتابیس از طریق SSMS را فراهم میکنند وجود دارد. در صورتی که نام دیتابیس هم یک اطلاع مهم از اپلیککیشن است و میتواند امنیت نرمافزارهای موجود روی سرور مد نظر را به خطر بیندازد.
روش کار با استفاده از SQL SERVER MANAGEMENT STUDIO 2012 به صورت زیر است:
۱- یک User ایجاد کنید:
برای این کار از مسیر (Security>Logins>Right Click>New Login) یک کاربر ساخته و اطلاعات زیر را متناسب با توضیحات عنوان شده تکمیل نمایید:
- تب General مقدار Default Database را روی دیتابیس مد نظرتان قرار دهید.
- در تب User Mapping تیک دیتابیس مورد نظر را زده دسترسیهای دلخواه خود را بدهید (معمولاً db_owner)
کاربر را ذخیره کنید.
۲- دسترسی View any database را از کاربر بگیرید. برای این کار از دستور زیر استفاده کنید:
DENY VIEW ANY DATABASE TO <user>
مقدار <user> برابر با کاربری است که به تازگی اضافه نمودهاید.
۳- باید owner دیتابیس را نیز تغییر دهید. برای این کار از دستور زیر استفاده کنید:
ALTER AUTHORIZATION ON DATABASE::<databasename> TO <user>;
مقدار <user> برابر با کاربری است که به تازگی اضافه نمودهاید و مقدار <databasename> برابر با دیتابیس مدنظر شماست.