2012-02-28 2 views
-4

Я использовал ASP.net с C#. Я хочу получить доступ к базе данных SQL Server через веб-сервер. При выполнении моего приложения из области разработки он работает, но после развертывания приложения на сервере IIS он отображает следующее исключение:Как получить доступ к базе данных удаленно через IIS?

Разрешение CREATE DATABASE запрещено в базе данных «master». Попытка прикрепить базу данных с автоименованием для файла D: \ newtest \ newtest.mdf не удалось. База данных с тем же именем существует, или указанный файл не может быть открыт, или он находится на общем ресурсе UNC.

Я использовал следующую строку подключения к базе данных с приложением

Data Source = .\\SQLEXPRESS;AttachDbFileName=databasepath; Integrated Security=true 

Как получить доступ к базе данных SQL Server удаленно через IIS?

ответ

0

Эй Создание Credential с сервером SQL и обновить конфигурационный файл

connectionString="Data Source=Abcl\SQLEXPRESS;Initial Catalog=master;User ID=sa;Password=pwd12" providerName="System.Data.SqlClient" 

если ваш используете файл базы данных, как мдф Pls использовать как этот

connectionString="AttachDbFilename='C:\Documents and Settings\nmartin\My Documents\PS_Upload\TimeTrack\src\TimeTracker\TimeTrack\App_Data\ASPNETDB.MDF';Integrated Security=True; User Instance=True" 
+0

в моей заявке нет файла фиксированной базы данных, я каждый раз меняю базу данных, у меня есть один файл в папке с папкой проекта, содержит путь к базе данных, прочитайте путь базы данных из этого файла, как передать путь к базе данных каждый раз в web.config и я использовал это соединение s tring в файле класса и как получить доступ к базе данных без userID в ASP.net – user847455

+0

эй я обновил свой ответ в качестве базы по вашему требованию ... pls check –

+0

Я должен буду предположить, что 'sa' является плохим примером для использования. –

0

Хотя ответ на Санджай является правильным, это не объясняет , почему вы получаете разрешение.

Код, запущенный в ASP.NET/IIS, запускается как конкретный пользователь, так как он игнорируется в конфигурации рабочего процесса. Для IIS 6 [Server 2003] (и ниже, я думаю) по умолчанию было NETWORK SERVICE для IIS 7+ [Server 2008], поведение по умолчанию должно выполняться как специальный пользователь пула приложений IISAPPPOOL\yourAppPoolName.

Если вы предоставите требуемые разрешения в своей базе данных для правильной учетной записи (-ов) пользователя, вы сможете обойти эту ошибку и использовать встроенную защиту.

Как в стороне, как правило, рекомендуется дать самый ограничительный (но все же действующий) набор разрешений для вашей базы данных. CREATE DATABASE требует довольно высокого уровня разрешений (я не помню, что у меня на голове). Если вы предоставите это приложение IIS, у вас будет значительный риск позволить менее почетному пользователю взять под контроль вашу систему баз данных и разрушая его.

0

Ключ в том, что вы использовали Integrated Security=True в своей строке conneciton.

При запуске проекта в среде разработки веб-приложение обычно запускается как ваша локальная учетная запись пользователя. Кроме того, ваша учетная запись обычно является привилегированным пользователем (администратором) на локальном экземпляре SQL.

На вашем сервере развертывания IIS обычно запускается как учетная запись локального компьютера (или учетная запись, предоставленная для вашего AppPool). У этой учетной записи обычно нет специальных привилегий на SQL-сервере instace.

Как указывает debracey, вы обычно не хотите, чтобы привилегии SQL вашего приложения были достаточно высокими, чтобы нанести какой-либо вред (даже если это честная ошибка с вашей стороны).Один общий шаблон, чтобы избежать tihs должен иметь две отдельные учетные записи SQL для вашего приложения:

  1. Высокопоставленный привилегироваяными счет для создания и изменения вашей schmea базы данных (например, db_owner роль)
  2. с ограниченной привилегиями учетной записи для доступа к (например, db_datareader и/или db_datawriter role)
Смежные вопросы