SharePoint 自定义 Web 部件在对象“xxx”、数据库“yyy”、所有者“dbo”上引发 SELECT 权限被拒绝
Posted
技术标签:
【中文标题】SharePoint 自定义 Web 部件在对象“xxx”、数据库“yyy”、所有者“dbo”上引发 SELECT 权限被拒绝【英文标题】:SharePoint Custom Web Part throws SELECT permission denied on object 'xxx', database 'yyy', owner 'dbo' 【发布时间】:2011-01-12 06:59:23 【问题描述】:我在开发服务器上使用 VS 2008 在 SharePoint 2007 中创建了一个自定义 Web 部件。它使用 SQL 数据库。使用我从备份客户端重新创建的测试数据库在我的服务器上一切正常。
现在我将其移至客户的生产服务器。我能够部署、安装和激活它。
但是当我尝试将 Web 部件添加到页面时,它会抛出一个对话框,其中显示“执行命令定义时发生错误。有关详细信息,请参阅内部异常”。
这是我在 LOG 文件中看到的内容:... SELECT permission denied on object 'xxx', database 'yyy', owner 'dbo' ...
Web 部件使用升级的权限访问数据库,即使用门户应用程序池服务帐户。此帐户具有访问数据库的适当权限。我不明白是什么导致了这个问题。
非常感谢任何帮助找出导致错误的原因!
编辑:
在此处包含的注释中粘贴代码以添加格式:
SPSecurity.RunWithElevatedPrivileges(delegate()
using (WAStockBinEntities context = new WAStockBinEntities())
var userStockBin = (from stockBins in context.T1view_SP_StockBin
where stockBins.ADName == currUserName
select stockBins) .ToList().FirstOrDefault();
StockRoomNumber.Text = userStockBin.Stockroom;
BinNumber.Text = userStockBin.BIN;
);
【问题讨论】:
您是如何访问数据库的?可以发一些代码吗? 您在使用 SPSecurity.RunWithElevatedPrivileges 吗?从您的问题来看,我并不太清楚。 您在查询 SharePoint 数据库吗?如果是这样,强烈建议不要直接查询SP数据库。 Kyle Trauberman,我使用 Linq to Entities,这是代码 sn-p: SPSecurity.RunWithElevatedPrivileges(delegate() using (WAStockBinEntities context = new WAStockBinEntities()) var userStockBin = (from stockBins在 context.T1view_SP_StockBin where stockBins.ADName == currUserName select stockBins) .ToList().FirstOrDefault(); StockRoomNumber.Text = userStockBin.Stockroom; BinNumber.Text = userStockBin.BIN; ); JD,是的,我正在使用 SPSecurity.RunWithElevatedPrivileges 【参考方案1】:SPSecurity.RunWithElevatedPrivileges
不会影响 LINQ 用来访问数据库的用户。我会查看 LINQ 用于访问数据库的连接字符串,并确保连接字符串中引用的用户对数据库具有权限
您可以通过调用数据上下文的Connection.ConnectionString
属性来检查正在使用的连接字符串。
using (WAStockBinEntities context = new WAStockBinEntities())
return context.Connection.ConnectionString;
【讨论】:
以上是关于SharePoint 自定义 Web 部件在对象“xxx”、数据库“yyy”、所有者“dbo”上引发 SELECT 权限被拒绝的主要内容,如果未能解决你的问题,请参考以下文章
摘要链接 Web 部件与 SharePoint 2007/2010 中的自定义 Web 部件冲突