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

Разрешение SELECT было отклонено на объекте "Адрес", базе данных "CNET_85731", схеме "dbo",

Я работаю в течение последних 7 месяцев на С# ASP.NET, используя Visual Studio 2008 и SQL Server 2008.

Сегодня я выполнял часть моего приложения, которое ранее выполнялось, и я получил следующую ошибку:

Разрешение SELECT было отклонено для объекта "Адрес", базы данных "CNET_85731", схемы "dbo".

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

protected void sdsAddressesList_Selected(object sender, SqlDataSourceStatusEventArgs e)
{
    if (e.AffectedRows == 0)
    {
        ddlAddresses.Items.Insert((0), new ListItem("No Billing Addresses", "0"));
    }
}

SQLDataSource определяется следующим образом:

<asp:SqlDataSource ID="sdsAddressesList" runat="server" OnSelecting="sdsAddressesList_Selecting" OnSelected="sdsAddressesList_Selected"
    SelectCommand="SELECT [AddressId], [ZipPostalCode], ZipPostalCode + '&nbsp;--&nbsp;' + Address1 AS CombinedAddress FROM [Address] WHERE ([CustomerID] = @CustomerID AND [IsBillingAddress] = @IsBillingAddress) ORDER BY [ZipPostalCode]"
    ConnectionString="<%$ ConnectionStrings:eCoSysConnection %>">
    <SelectParameters>
        <asp:Parameter Name="CustomerID" Type="Int32" />
        <asp:Parameter Name="IsBillingAddress" Type="Boolean" />
    </SelectParameters>
</asp:SqlDataSource>

В принципе, что делает элемент управления, это получить список адресов для зарегистрированного пользователя из таблицы [Адрес], а затем заполнить выпадающий список ddlAddresses.

Таблица адресов имеет все те же права, что и остальные таблицы в базе данных. У меня около 60 таблиц и около 200 хранимых процедур, которые весело работают с SELECT и т.д. Нет проблем. Кроме этого одного вопроса. Что происходит? Я не внес никаких изменений в разрешения базы данных или таблицы.

Кто-нибудь может мне помочь.

Привет

Вальтер

4b9b3361

Ответ 1

В качестве проблемных состояний "Разрешение SELECT было отклонено на объекте" Адрес ", базе данных" CNET_85731 ", схеме" dbo ".

Интересно, вы можете просто решить этот путь:

  • Откройте студию управления SQL Server
  • Перейдите в базу данных "CNET_85731" → Безопасность → Пользователи
  • Щелкните правой кнопкой мыши тот, который вы используете в своем коде.
  • И, наконец, просто выберите " db_datareader" в разделе "Членство в роли базы данных".

Теперь я надеюсь, что вы не должны снова получать эту ошибку.

Ответ 2

Ну, я не уверен, какая причина была для разрешения SELECT для вашего пользователя db, но если вы запустите это, а затем он действительно работает снова, то где-то вдоль линии ваше разрешение SELECT было действительно уничтожено.

GRANT SELECT ON [dbo].[Address] TO [your user name here]

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

Я не думаю, что у нас достаточно информации, чтобы ответить на ваш вопрос о том, "почему" это произошло - хотя, ничто из того, что вы опубликовано, не является виновником.

Ответ 3

В своей студии управления SQL Server щелкните правой кнопкой мыши по вашей базе данных, затем выберите разрешение, затем выберите пользователя, затем выберите выделение, отредактируйте, обновите и удалите. Источник http://go4answers.webhost4life.com/Example/select-permission-denied-object-159536.aspx

Ответ 4

Был быстрый google, нашел эту ссылку Ссылка

Предлагается запустить

select object_name(major_id) as object,
 user_name(grantee_principal_id) as grantee,
 user_name(grantor_principal_id) as grantor,
 permission_name,
 state_desc
from sys.database_permissions
 where major_id = object_id('Users')
 and class = 1

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

Изменить

select object_name(major_id) as object,
 user_name(grantee_principal_id) as grantee,
 user_name(grantor_principal_id) as grantor,
 permission_name,
 state_desc
from sys.database_permissions
 WHERE state_desc = 'DENY'

Чтобы найти запущенный SQL 2k8 и запустить его, этот новый запрос покажет все отклонения. Также попробуйте взять предложение WHERE, чтобы просмотреть все разрешения для всех таблиц в текущей выбранной базе данных

Ответ 5

Если это даст вам эту ошибку в SQL Server Management Studio, просто запустите SQL Server Management Studio как администратор, который должен работать.

Ответ 6

Удалите следующую часть строки подключения;

В защищенной безопасности = True;

И все работает отлично для меня.