Разрешение 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 + ' -- ' + 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 и т.д. Нет проблем. Кроме этого одного вопроса. Что происходит? Я не внес никаких изменений в разрешения базы данных или таблицы.
Кто-нибудь может мне помочь.
Привет
Вальтер
Ответы
Ответ 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;
И все работает отлично для меня.