2012-06-10 3 views
2

У меня есть установка SQL Server 2012 Express с новой БД под названием BRD, которую я создал. Я также создал тестовую таблицу (tempDemo) и тестовую хранимую процедуру (getStList) в базе данных BRD. Хранимая процедура работает, когда я запускаю ее в окне запроса, поэтому считаю, что таблица и хранимая процедура являются законными. SQL Server установлен в «SQL Server и Windows Authentication mode».SQL Server 2012 классическая строка подключения asp

Затем я попытался создать страницу классический ASP, который затем подключен к SQL Server, используя следующую строку соединения:

objConn.ConnectionString="Provider=SQLOLEDB;Server=XPSI7\SQLEXPRESS;Database=BRD;Integrated Security=SSPI;" 

Это выдает следующее сообщение:

«Microsoft OLE DB Провайдер для ошибки SQL Server «80004005» Не удается открыть базу данных «BRD», запрошенную при входе в систему.

При изменении базы данных на MASTER вместо BRD страницы ASP не без ошибок. Я просто проверяю строку соединения, открывая ее, а затем закрывая ее, но она работает.

Я просмотрел параметры безопасности для MASTER и BRD в Обозревателе объектов, но не заметил различий. Я также посмотрел на IIS_IUSRS для папок, но и никакой разницы - не уверен, что это необходимо в любом случае.

+1

пользователя вы пытаетесь использовать - это его в список на вкладке Security для базы данных BRD? Очевидно, что это действительный логин, но, похоже, он не связан с базой данных BRD ... Пока ссылка связана с действительным именем входа в систему, это проблема с разрешением на доступ к базе данных. –

+0

Спасибо за удивительно быстрый ответ OMG Ponies. Вопрос хороший, однако, я немного запутался в этом. Что такое «пользователь»? В строке подключения я не указываю один (я не думаю). Чтобы попытаться ответить на ваш вопрос, у меня есть Гость под каждым пользователем, однако у гостя BRD есть красная стрелка вниз. –

ответ

4

SQL Server аутентифицирует ваш логин на уровне сервера. Затем он пытается открыть базу данных, к которой вы попросили подключиться. На этом этапе вам необходимо либо отобразить пользователя на уровне базы данных для входа на серверный уровень, либо использовать вход на уровне сервера, который по своей сути обладает достаточными правами на использование базы данных.

Простой (но не безопасный) способ продемонстрировать это с помощью проверки подлинности SQL Server:

USE master; 
GO 
CREATE LOGIN foo 
    WITH PASSWORD = 'bar', CHECK_POLICY = OFF; 
GO 
USE BRD; 
GO 
CREATE USER foo FROM LOGIN foo; 
GO 
EXEC sp_addrolemember N'db_owner', N'foo'; 
GO 

Теперь в строке подключения ASP, использование:

objConn.ConnectionString = «Provider = SQLNCLI Источник данных = XPSI7 \ SQLEXPRESS; Начальный каталог = BRD; Идентификатор пользователя = foo; Пароль = бар;

Вы также можете отобразить все, что войти в систему вы используете для пользователя базы данных просто делать:

USE BRD; 
GO 
CREATE USER [YourDomain\IIS_IUSRwhatever] 
    FROM LOGIN [YourDomain\IIS_IUSRwhatever]; 
GO 

Это даст им доступ к базе данных, но это будет до вас, чтобы решить, какие разрешения наградить. Это предполагает, что вы разрешаете анонимный доступ к веб-серверу; если IIS бросает вызов и принимает аутентификацию Windows, вам нужно будет сделать это выше для пользователей (пользователей), которые будут отправлять свои учетные данные. В любом случае вы сможете продолжить использовать строку подключения, которую вы сейчас используете.

+0

Спасибо Аарон. Ваш ответ был кратким, понятным и правильным. Вы говорите, что это не очень безопасно. Если бы я хотел избежать внедренного подхода USER ID & PASSWORD и использовать Integrated Security = SSPI в connectionString, как много больше работы? –

+0

Небезопасная часть была посвящена предоставлению пользователю приложения db_owner ... Обычно вы не отдавали бы столько времени пользователю auth или Windows auth. Я действительно не вижу причины использовать windows auth здесь, если вы просто используете учетную запись IIS. С учетной записью SQL auth приятно, что вы можете легко подключиться и отлаживать себя как один и тот же пользователь. Вы бы использовали windows auth, я думаю, если вы действительно проходили аутентификацию через веб-сайт и передавали учетные данные Windows. Здесь плюсовая сторона - это легче отследить, кто что делает. Но вам нужно настроить отдельных пользователей/пользователей или использовать группы окон ... –

+0

Очень хорошо. Еще раз спасибо. –

0

Попробуйте следующую строку соединения:

strConnection = "Provider=SQLNCLI10;Server=server_name;Database=" & BD_REMOTE_INITIAL_CATALOG & ";Uid=" & BD_REMOTE_USER_ID & "; Pwd=*****;" 
Смежные вопросы