اگر مشکل فقط ConnectionString هست راه های زیادی برای حلش وچود داره. مثلا:
1- اطلاعات حساس رو داخل conntectio string قرار ندید و اون ها رو در زمان اجرا، از کاربر دریافت کرده و به connection string اضافه کنید.
2- محتوای connection string رو رمزنگاری کنید (با الگوریتم های مناسب) و در زمان مورد نیاز اون رو رمزگشایی کنید. (به صورت دستی ممکنه یه مقدار کار بخواد این روش)
3- میتونید از قابلیت های رمزنگاری خود دات نت برای این کار استفاده کنید که مختص محافظت از اطلاعات configuration طراحی شده. این ابزار ها به صورت خودکار section های مشخص شده رو رمزنگاری کرده و در زمان مورد نیاز به صورت خودکار رمزگشایی می کنند. در واقع برنامه نویس دیگه درگیر جزئیات نخواهد شد. به عنوان نمونه کد زیر رو ببینید:
var configFile = WebConfigurationManager.OpenWebConfiguration(Syste m.Web.HttpRuntime.AppDomainAppVirtualPath);
if (configFile != null)
{
var section = configFile.Sections["connectionStrings"];
section.SectionInformation.ProtectSection("DataPro tectionConfigurationProvider");
section.SectionInformation.ForceSave = true;
configFile.Save(ConfigurationSaveMode.Modified);
}
4- استفاده از معماری های SOAP مانند Web Serivce ها و WCF. شخصا این روش رو بیشتر می پسندم. اولا اینکه لایه های منطقی برنامه رو به شکل بهتری میشه با این ابزار از هم جدا کرد و دوم اینکه سمت کلاینت همیشه میدونه که با سرویسی با این ویژگی ها قراره در ارتباط باشه و فقط اون سرویس (ها) رو میشناسه و به هیچ وجه از وجود موجودی به اسم سرور اطلاعی نداره که این موضوع هم از نظر مباحث امنیتی میتونه مفید باشه و هم از نظر مباحث طراحی loosely coupled.
در ضمن اگر از این روش استفاده کنید خواهید دید که develope با این روش ساده تر و روان تر هست.
موفق باشید