对象’地址’,数据库’CNET_85731’,架构’dbo’上的SELECT权限被拒绝

我使用Visual Studio 2008和SQL Server 2008在C#ASP.NET上工作了7个月。

今天,我正在运行以前运行的应用程序的一部分,我收到以下错误:

对象’地址’,数据库’CNET_85731’,架构’dbo’上的SELECT权限被拒绝。

我浏览了我的代码并发现此错误是由以下用户控件引起的:

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="">      

基本上,控件执行的操作是从[Address]表中检索登录用户的地址列表,然后填充下拉列表ddlAddresses。

Address表具有与数据库中其余表相同的权限。 我有大约60个表和大约200个存储过程都快乐地做SELECTs等工作。没问题。 除了这一个问题。 到底是怎么回事? 我没有对数据库或表权限进行任何更改。

任何人都可以帮助我。

问候

沃尔特

正如问题所述,“对象’地址’,数据库’CNET_85731’,架构’dbo’”的SELECT权限被拒绝。

我想你可以简单地解决这个问题:

  • 打开SQL Server Management工作室
  • 导航到数据库’CNET_85731’>>安全>>用户
  • 右键单击您在代码中使用的那个
  • 最后,只需在“数据库角色成员资格”部分中选择“ db_datareader ”即可。

现在,我希望你不要再犯这个错误。

好吧,我不确定你的数据库用户拒绝SELECT权限的根本原因是什么,但如果你运行它然后它确实再次工作,那么在某个地方,你的SELECT权限确实被删除了。

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

好消息是权限不会神奇地消失; 坏消息是(工具或其他)确实要么删除或撤销权限。

我认为我们没有足够的信息来回答你关于“为什么”它发生的问题 – 尽管你发布的内容似乎都不是罪魁祸首。

在SQL Server Management Studio中,右键单击数据库,然后单击权限,然后选择用户,然后授予选择,编辑,更新和删除权限。 来源http://go4answers.webhost4life.com/Example/select-permission-denied-object-159536.aspx

有一个快速的谷歌,发现此链接链接

它建议跑步

 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框并运行它,这个新查询将显示所有deny的。 还要尝试取出WHERE子句,以查看当前所选数据库中所有表的所有权限

如果它在SQL Server Management Studio中给出了该错误,那么只需以管理员身份运行SQL Server Management Studio即可。

删除连接字符串的以下部分;

在综合安全=真;

一切都适合我。