Подтвердить что ты не робот

У разрешения EXECUTE было отказано в объекте 'aspnet_CheckSchemaVersion', в базе данных 'XXX'

Я использую asp.net 4 С# и сущность framework 4 с MS SQL 2008. Я пытаюсь настроить свое веб-приложение локально с помощью IIS 7.

Для моего веб-сайта я использовал провайдер членства Asp, который установил разные таблицы и sprocs в моем db (aspnet _).

Запустив script, мы получим эту ошибку:

The EXECUTE permission was denied on the object 'aspnet_CheckSchemaVersion', database 'XXX', schema 'dbo'.     at System.Data.SqlClient.SqlConnection.OnError
  • Как я могу решить проблему? Пожалуйста, предоставьте мне четкие инструкции. Спасибо за ваш hep на этом.
4b9b3361

Ответ 1

Должны быть некоторые роли db, связанные с таблицами членства, например aspnet_profile_fullaccess. Убедитесь, что учетная запись, которую вы используете, является членом соответствующей роли.

Вы не должны назначать пользователя, которого вы подключаете к БД, как привилегия dbowner. У учетной записи должны быть только права, в которых она нуждается, и больше ничего. Если вы предоставите dbo, и кто-то воспользуется недостатком на вашем сайте, у них будет полный неконтролируемый доступ ко всему вашему db к тому, что они хотят - удалите таблицы, измените данные по своему усмотрению.

Ответ 2

Я не думаю, что вы должны сделать пользователя db_owner. У меня была та же проблема, и было достаточно, чтобы увеличить 4 роли с BasicAccess для моего пользователя +, чтобы дать ему разрешение EXECUTE для всех сохраненных proc:

ГРАНТ ВЫПОЛНИТЬ [имя пользователя];

Я знаю, что это не идеально. Нужно предоставить разрешения EXECUTE только на требуемом сохраненном proc, но если вам нужно быстрое решение, пока не найдете, какой SP ваш пользователь должен выполнить, это должно сработать.

Ответ 3

Проблема заключается в том, что идентификатор пользователя, к которому подключается приложение, не имеет достаточных привилегий в базе данных. Это либо должно быть владельцем базы данных, либо иметь разрешения на все хранимые процедуры aspnet_.

Поэтому, пожалуйста, проверьте разрешения на SQL Server 2008 для этого конкретного пользователя. и, если возможно, сделать этого пользователя как dbowner.

Надеюсь, что это поможет...

Изменить: Я хотел, чтобы вы сделали это как dbowner, чтобы удостовериться, что есть некоторые проблемы с разрешением, как только вы уверены в этой проблеме, вы можете назначить разрешения этому пользователю. следовательно, зная точную причину и точное решение.

Ответ 4

Я согласен, что можно проверить, добавив роль db_owner для проверки ошибки разрешения. Но следует напомнить со всей срочностью только о тестировании и обязательно снять роль.

Щелкните правой кнопкой мыши на Login User >>, выберите свойства >>, затем User Mapping.

Глядя на предоставленную ошибку SQL, вы можете предположить, что это проблема, основанная на "Отказ в выполнении". После использования роли db_owner в качестве теста и подтверждения можно просмотреть различные операторы SQL, чтобы увидеть, какие хранимые процедуры вызываются. Например, рассмотрим следующее

SQL As String = "EXEC [EAC]. [MyStoredProcedure]" и т.д. , , "

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

USE DATABASE
GRANT EXECUTE ON OBJECT::EAC.myStoredProcedure
TO myRoleorUser; 

Обратите внимание, что EAC.myStoredProcedure, упомянутый в коде, обнаруживается при расширении базы данных, затем программируемости, а затем - хранимых процедур.

Вот Microsoft KB для получения дополнительной помощи по нацеливанию определенных хранимых процедур на сервере SQL. https://docs.microsoft.com/en-us/sql/relational-databases/stored-procedures/grant-permissions-on-a-stored-procedure?view=sql-server-2017