我使用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="<%$ ConnectionStrings:eCoSysConnection %>">
<SelectParameters>
<asp:Parameter Name="CustomerID" Type="Int32" />
<asp:Parameter Name="IsBillingAddress" Type="Boolean" />
</SelectParameters>
</asp:SqlDataSource>
基本上,控件所做的是从[Address]表中检索登录用户的地址列表,然后填充下拉列表ddlAddresses。
Address表具有与数据库中其余表相同的权限。我有大约60个表和大约200个存储过程都快乐地做SELECTs等工作。没问题。除了这一个问题。到底是怎么回事?我没有对数据库或表权限进行任何更改。
任何人都可以帮助我。
此致
沃尔特
答案 0 :(得分:61)
正如问题所述,“对象'地址',数据库'CNET_85731',架构'dbo'”的SELECT权限被拒绝。
我想你可以简单地解决这个问题:
现在,我希望你不要再犯这个错误了。
答案 1 :(得分:14)
嗯,我不确定对于你的db用户拒绝的SELECT权限的根本原因是什么,但是如果你运行它然后它确实再次工作,那么在某个地方,你的SELECT权限确实被删除了。
GRANT SELECT ON [dbo].[Address] TO [your user name here]
好消息是权限不会神奇地消失;坏消息是(工具或其他方面)确实要么删除或撤销权限。
我认为我们没有足够的信息来回答您关于“为什么”发生的问题 - 但是,您发布的内容似乎都不是罪魁祸首。
答案 2 :(得分:4)
在SQL Server Management Studio中,右键单击数据库,然后单击权限,然后选择用户,然后授予选择,编辑,更新和删除权限。资源 http://go4answers.webhost4life.com/Example/select-permission-denied-object-159536.aspx
答案 3 :(得分:3)
快速谷歌,发现此链接Link
建议运行
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子句,以查看当前所选数据库中所有表的所有权限
答案 4 :(得分:0)
如果它在SQL Server Management Studio中出现错误,那么只需以管理员身份运行SQL Server Management Studio即可。
答案 5 :(得分:0)
删除连接字符串的以下部分;
在tegrated Security = True;
一切都适合我。