简述Linq to SharePoint与权限提升

SharePoint 2010支持Linq to SharePoint,让程序员可以使用Linq语法直接访问SharePoint 2010网站中的数据。但是在默认情况下,Linq to SharePoint不支持权限提升,也就是说,如果在代码中尝试通过SPSecurity.RunWithElevatedPrivileges()方法来提升执行权限,你可能会发现,代码并不会如你所愿的以系统帐户的身份,访问SharePoint网站的数据。

下面是一段典型的权限提升的代码,在匿名委托方法中,首先构造了新的SPSite和SPWeb对象,然后使用Linq to SharePoint查询了一个列表中所有列表项的标题。虽然看起来Linq to SharePoint好像会被提升它执行的权限,但实际情况并非如此。在下面的代码中,中间的Linq to SharePoint代码并不会受到外面调用SPSecurity.RunWithElevatedPrivileges()方法的影响。

private IEnumerable<String> GetAllHardwareNames()
{
    var currentWebUrl = SPContext.Current.Web.Url;
    List<String> result = null;

    SPSecurity.RunWithElevatedPrivileges(delegate()
    {
        using (var site = new SPSite(currentWebUrl))
        {
            using (var web = site.OpenWeb())
            {
                using (var ctx = new ContosoDataContext(currentWebUrl))
                {
                    var names = from h in ctx.硬件资产跟踪
                                select h.标题;
                    result = names.ToList();
                }
            }
        }
    });

    return result;
}

如果希望Linq to SharePoint代码能够提升它的执行权限,在使用Linq to SharePoint之前,需要做一个比较trick的事情,那就是将当前HttpContext对象设置为null。下面的代码中,使用粗体标识了这些特殊的代码。

SPSecurity.RunWithElevatedPrivileges(delegate()
{
    using (var site = new SPSite(currentWebUrl))
    {
        using (var web = site.OpenWeb())
        {
            var httpContext = HttpContext.Current;
            HttpContext.Current = null;

            using (var ctx = new ContosoDataContext(currentWebUrl))
            {
                var names = from h in ctx.硬件资产跟踪
                            select h.标题;
                result = names.ToList();
            }

            HttpContext.Current = httpContext;
        }
    }
});

只所以要使用这个技巧,是因为在Linq to SharePoint的实现中,使用了一个名为Microsoft.SharePoint.Linq.Provider.SPServerDataConnection的类,来真正连接到SharePoint网站。在这个类的构造函数中,有类似这样的代码:

if (SPContext.Current != null)
{
    this.defaultSite = SPContext.Current.Site;
    this.defaultWeb = (SPContext.Current.Web.Url == url) ? SPContext.Current.Web : this.defaultSite.OpenWeb(new Uri(url).PathAndQuery);
}
else
{
    this.defaultSite = new SPSite(url);
    this.defaultWeb = this.defaultSite.OpenWeb(new Uri(url).PathAndQuery);
}

为了提高性能,它会优先重用SPContext对象中所缓存的SPWeb和SPSite对象。这个行为虽然可以提高代码的运行效率,但是却会导致权限提升的失效,因为提升了权限的代码必须使用一个新构造的SPSite和SPWeb对象。

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/web/sharepoint/

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索权限
, linq
, 代码
, sharepoint
, var
, SPSite
current
sharepoint 提升权限、linq to sharepoint、sharepoint权限管理、sharepoint文件夹权限、sharepoint 视图权限,以便于您获取更多的相关知识。

时间: 2025-01-21 11:26:22

简述Linq to SharePoint与权限提升的相关文章

SECURITY INVOKER存储过程权限提升漏洞

MySQL AB SECURITY INVOKER存储过程权限提升漏洞. 受影响系统: MySQL AB MySQL 5.1.x < 5.1.18. MySQL AB MySQL 5.0.x < 5.0.40. 不受影响系统: MySQL AB MySQL 5.1.18. MySQL AB MySQL 5.0.40. 描述: MySQL是一款使用非常广泛的开放源代码关系数据库系统,拥有各种平台的运行版本. MySQL在处理SQL SECURITY INVOKER存储过程的返回状态时存在漏洞,本

使用LINQ to SharePoint检索SharePoint中的数据

LINQ to SharePoint是一个自定义的LINQ提供器,能够让你使用熟悉的LINQ语法来查询SharePoint列表的数据.这样,在处理查询SharePoint数据的时候,就不会因为CAML的复杂用法而苦恼了. 它的基本特性包括: 把查询表达式转换为CAML(Collaborative Application Markup Language) 支持C# 3.0和Visual Basic 9.0 提供了一个实体创建工具SpMetal,可以基于SharePoint列表的定义生成用于 查询的

堵住Microsoft.NET本地权限提升的漏洞风险

微软的.NET组件爆出严重的溢出漏洞,只要是安装了.NET组件的操作系统都会受到此漏洞的影响.也就是说,我们用得最多的Windows XP.Win7系统,网站服务器用得最多的Windows 2003,Winodws 2008都不能幸免.那么这个漏洞的出现对于黑客来说意味着什么呢?网络安全界又将掀起怎样的风波呢?请看本文. ★编辑提示:本地权限提升的危害 这次.NET爆出的溢出漏洞并不能远程执行代码,而只能进行本地溢出,溢出后可以拿到系统的管理员权限.简单的说:这个是一个本地权限提升漏洞.那么本地

mysql远程代码执行/权限提升漏洞

就我目前测试的情况来看,这个漏洞比较鸡肋,原因有以下两点: 1,使用默认方式安装的mysql,mysql用户并没有配置文件/etc/mysql/my.cnf的所属权限: 2,不关闭selinux或apparmor的话,exp脚本执行是会报错的. legalhackers原文中提到这个漏洞的前提是很多人按照错误的安装指南来进行权限配置,将配置文件的所属用户修改成了mysql.不过貌似漏洞发现者手里还藏了几个更加严重的mysql漏洞,并没有披露. I. VULNERABILITY MySQL <=

绿盟科技网络安全威胁周报2017.34 Fortinet FortiManager权限提升漏洞CVE-2015-3617

绿盟科技发布了本周安全通告,周报编号NSFOCUS-17-34,绿盟科技漏洞库本周新增43条,其中高危3条.本次周报建议大家关注 Fortinet FortiManager权限提升漏洞 .目前厂商已发布更新程序,请使用Fortinet FortiManager的用户及时到 厂商的主页 下载更新程序,升级修复. 焦点漏洞 Fortinet FortiManager权限提升漏洞 NSFOCUS ID 37450 CVE ID CVE-2015-3617 受影响版本 Fortinet FortiMan

绿盟科技互联网安全威胁周报2016.37 请关注Linux 内核权限提升漏洞CVE-2015-8966

绿盟科技发布了本周安全通告,周报编号NSFOCUS-16-37,绿盟科技漏洞库本周新增70条,其中高危68条.本次周报建议大家关注 Linux 内核权限提升漏洞 ,Linux官方已经发布了升级补丁以修复这个安全问题,请用户尽快升级修复此漏洞. 焦点漏洞 Linux 内核权限提升漏洞 CVE ID CVE-2015-8966 受影响版本 Linux kernel < 4.4 漏洞点评 Linux 内核小于4.4版本在arch/arm/kernel/sys_oabi-compat.c文件中存在安全漏

绿盟科技网络安全威胁周报2017.02 请关注Microsoft Edge远程权限提升漏洞 CVE-2017-0002

绿盟科技发布了本周安全通告,周报编号NSFOCUS-17-02,绿盟科技漏洞库本周新增40条,其中高危25条.本次周报建议大家关注 Microsoft Edge远程权限提升漏洞 ,目前,微软公司已经发布了修复补丁程序.用户可通过Windows Update自动更新功能更新存在漏洞的旧版本程序,也可以到微软官网下载更新补丁升级. 焦点漏洞 Microsoft Edge远程权限提升漏洞 NSFOCUS ID  35738 CVE ID  CVE-2017-0002 受影响版本 Microsoft E

webshell权限提升技巧_漏洞研究

WEBSHELL权限提升技巧 c: d: e:.....  C:\Documents and Settings\All Users\「开始」菜单\程序\  看这里能不能跳转,我们从这里可以获取好多有用的信息比如Serv-U的路径,  C:\Documents and Settings\All Users\Application Data\Symantec\pcAnywhere\  看能否跳转到这个目录,如果行那就最好了,直接下它的CIF文件,破解得到pcAnywhere密码,登陆  c:\Pro

超全的webshell权限提升方法_安全相关

WEBSHELL权限提升技巧  c: d: e:.....  C:\Documents and Settings\All Users\「开始」菜单\程序\  看这里能不能跳转,我们从这里可以获取好多有用的信息比如Serv-U的路径,  C:\Documents and Settings\All Users\Application Data\Symantec\pcAnywhere\  看能否跳转到这个目录,如果行那就最好了,直接下它的CIF文件,破解得到pcAnywhere密码,登陆  c:\Pr