Я пытаюсь получить доступ к базе данных моего хостинг-сервера через SQL Server Management Studio, все до входа в систему в порядке, но когда я использую команду, use myDatabase
она дает мне эту ошибку:
The server principal "****" is not able to access the database "****" under the current security context.
Я поискал, и поставщики услуг хостинга перечислили это исправление проблемы.
Но это не работает для меня, вероятно, потому что это для SQL Server Management Studio 2008, однако я использую SQL Server Management Studio 2012.
Может это проблема? И если да, то кто может сказать мне его альтернативу в SSMS 2012?
Ответы:
Проверьте, сопоставлен ли ваш пользователь с БД, в которую вы пытаетесь войти.
источник
У нас была такая же ошибка при развертывании отчета в SSRS в нашей среде PROD. Было обнаружено, что проблему можно даже воспроизвести с помощью оператора «использовать». Решение состояло в том, чтобы повторно синхронизировать ссылку на учетную запись GUID пользователя с рассматриваемой базой данных (т. Е. С помощью sp_change_users_login, как если бы вы делали это после восстановления базы данных). Прилагается стандартный (управляемый курсором) скрипт для повторной синхронизации всех учетных записей:
источник
Это сработало для меня:
Проблема может быть визуализирована с помощью:
источник
Я довольно долго боролся с этой проблемой, а затем понял, что совершаю простую ошибку, потому что забыл, на какую конкретную базу данных нацелено мое соединение. Я использовал стандартное окно подключения к SQL Server для ввода учетных данных:
Мне пришлось проверить вкладку « Свойства подключения », чтобы убедиться, что я выбираю правильную базу данных для подключения. Я случайно оставил здесь параметр « Подключиться к базе данных» на выбор из предыдущего сеанса. Вот почему мне не удалось подключиться к базе данных, к которой я думал, что пытаюсь подключиться.
Обратите внимание, что вам нужно нажать
Options >>
кнопку, чтобы отобразились Свойства подключения и другие вкладки.источник
Имена входа SQL определяются на уровне сервера и должны быть сопоставлены с пользователями в определенных базах данных.
В проводнике объектов SSMS под сервером, который вы хотите изменить, разверните Безопасность > Логины , затем дважды щелкните соответствующего пользователя, после чего откроется диалоговое окно «Свойства входа».
Выберите User Mapping , чтобы отобразить все базы данных на сервере, с теми, у которых выбрано существующее сопоставление. Отсюда вы можете выбрать дополнительные базы данных (и обязательно выбрать роли в каждой базе данных, к которым должен принадлежать пользователь), затем нажмите OK, чтобы добавить сопоставления.
Эти сопоставления могут быть отключены после восстановления или аналогичной операции. В этом случае пользователь может все еще существовать в базе данных, но фактически не сопоставлен с именем входа. Если это произойдет, вы можете запустить следующее, чтобы восстановить логин:
Вы также можете удалить пользователя БД и воссоздать его в диалоговом окне «Свойства входа», но при этом потребуется воссоздать членство в ролях или другие параметры.
источник
В моем случае сообщение было вызвано синонимом, который случайно включил имя базы данных в «имя объекта». Когда я восстановил базу данных под новым именем, синоним все еще указывал на старое имя БД. Поскольку у пользователя не было разрешений в старой БД, появилось сообщение. Чтобы исправить это, я удалил и воссоздал синоним без уточнения имени объекта и имени базы данных:
источник
У нас была такая же ошибка, хотя пользователь был правильно сопоставлен с логином.
После попытки удалить пользователя было обнаружено, что несколько SP содержат «с выполнением от имени» этого пользователя.
Проблема была решена путем удаления этих SP, удаления пользователя, повторного создания пользователя, связанного с входом в систему, и повторного создания SP.
Возможно, он попал в это состояние из-за восстановления из резервной копии (в то время, когда соответствующий логин не существовал) или массовой синхронизации схемы (если возможно создать SP с выполнением, как даже если пользователь не существует. был связан с этим ответом .
источник
Я столкнулся с той же ошибкой при использовании объектов управления сервером (SMO) в vb.net (я уверен, что то же самое и в C #)
Комментарий Techie Joe к первоначальному посту был полезным предупреждением о том, что в виртуальном хостинге происходит много дополнительных вещей. Понадобилось немного времени, чтобы разобраться, но приведенный ниже код показывает, как нужно быть очень конкретным в способе доступа к базам данных SQL. Ошибка «принципала сервера ...», казалось, появлялась всякий раз, когда вызовы SMO не были точно конкретными в среде общего хостинга.
Этот первый раздел кода был направлен против локального сервера SQL Express и полагался на простую аутентификацию Windows. Весь код, используемый в этих примерах, основан на учебнике Роберта Канаша по SMO в этой статье веб-сайта Code Project :
Приведенный выше код прекрасно находит файлы .mdf для каждой базы данных на локальном сервере SQLEXPRESS, потому что аутентификация обрабатывается Windows и распространяется на все базы данных.
В следующем коде есть 2 раздела, повторяющиеся для файлов .mdf. В этом случае работает только первая итерация, ищущая файловую группу, и она находит только один файл, потому что соединение осуществляется только с одной базой данных в среде общего хостинга.
Вторая итерация, которая является копией той итерации, которая работала выше, немедленно подавляется, потому что способ ее написания пытается получить доступ к 1-й базе данных в общей среде, которая не является той, к которой применяется идентификатор пользователя / пароль, поэтому SQL-сервер возвращает ошибку авторизации в виде ошибки «участник-сервер ...».
Во втором цикле итерации код компилируется нормально, но поскольку SMO не был настроен для доступа именно к правильной базе данных с точным синтаксисом, эта попытка не удалась.
Поскольку я только изучаю SMO, я подумал, что другим новичкам может быть интересно узнать, что есть более простое объяснение этой ошибки - мы просто неправильно ее закодировали.
источник
Я полагаю, что при создании пользователя базы данных вам могло не хватать инструкции «Grant Connect To».
Ниже приведен полный фрагмент кода, который вам понадобится для создания как входа в СУБД SQL Server, так и пользователя в базе данных.
источник