WSS 代码执行的权限提升

原创 2008年05月24日 13:38:00

WSS 代码执行的权限提升

概述:

WSS 默认使用身份模拟执行代码,也就是说用当前登录的用户身份执行Web Part或者自定义应用程序的代码访问。在大多数情况下,这种机制能够准确并严格地控制了标准权限的用户他对特定网站资源和敏感数据的访问,这也是我们想要达到的目标。

然而,有时候在一些特殊的场景,你的代码必须执行wss 对象某些受限制的方法,即便请求者是没有这个权限的用户。那么在这种情况下,我们需要提升普通用户执行代码的权限。

实现方法:

SPSecurity.RunWithElevatedPrivileges(delegate()

{

    // 需要提升权限执行的代码

});

事例:

获取网站集owner 的 名称 SPSite.Owner.Name

默认是需要网站集管理员权限的用户才能得到,如果没有执行代码权限提升,以一个普通用户去执行SPSite.Owner.Name,系统会报一个”拒绝访问”的错误。

然而执行了如下代码,我们普通权限的用户,也可以成功得访问到SPSite.Owner.Name

SPSite siteColl = SPContext.Current.Site;

SPWeb site = SPContext.Current.Web;

SPSecurity.RunWithElevatedPrivileges(delegate() {

using (SPSite ElevatedsiteColl = new SPSite(siteColl.ID)) {

using (SPWeb ElevatedSite = ElevatedsiteColl.OpenWeb(site.ID))

{

        //以SHAREPOINT"System account 系统帐号身份运行

      string SiteCollectionOwner = ElevatedsiteColl.Owner.Name;    

    }

 }

});

注意:

在使用SPSecurity.RunWithElevatedPrivileges权限提升的代码里头,必须实例化SPSite,SPWeb对象,而不能使用Microsoft.SharePoint.SPContext.Current属性获得对象,因为那些对象是以当前用户的安全上下文创建的

请使用using方式实例化对象,以便系统能自动执行Dispose,完成资源释放。

上面谈到的这种方式是以最高完全权限的系统管理员帐户去执行代码的,当然我们也可以指定运行代码的帐号:

SPSite siteColl = SPContext.Current.Site;

SPWeb site = SPContext.Current.Web;

SPUser user = site.Users[@"litware/ken"];

SPUserToken userToken = user.UserToken;

 

SPSecurity.RunWithElevatedPrivileges(delegate() {

using (SPSite ElevatedsiteColl = new SPSite(siteColl.ID, userToken)) {

using (SPWeb ElevatedSite = ElevatedsiteColl.OpenWeb(site.ID))

{        //以litware"ken身份运行
      string SiteCollectionOwner = ElevatedsiteColl.Owner.Name;    

    }

 }

});

这种方式的话,代码就以litware"ken 的权限来运行,不管ken 的权限是高还是低。

提升进程权限

文章一: 在枚举/结束系统进程或操作系统服务时,会出现自己权限不足而失败的情况,这时就需要提升自己进程到系统权限,其实提升权限的代码很简单的,看到过的最经典的应该是《WINDOWS核心编程》第四...
  • hetangbian
  • hetangbian
  • 2017年01月05日 11:25
  • 769

Win7下普通权限进程动态提升权限

一、前提      在Vista/Win7下,加强了对安全的管理,对注册表修改,系统目录的文件操作,都需要管理员权限才能完成(当然虚拟存储机制,表面上也相当于能操作)。所以,对于程序中有相关操作的,...
  • davidsu33
  • davidsu33
  • 2014年09月27日 17:14
  • 1321

提升进程权限的几个常用函数

文章一: 在枚举/结束系统进程或操作系统服务时,会出现自己权限不足而失败的情况,这时就需要提升自己进程到系统权限,其实提升权限的代码很简单的,看到过的最经典的应该是《WINDOWS核心编程》第四章中操...
  • qq_22642239
  • qq_22642239
  • 2017年04月10日 19:47
  • 283

Windows提升进程权限

Windows提升进程权限 文章一: 在枚举/结束系统进程或操作系统服务时,会出现权限不足而失败的情况,这时就需要提升自己进程到系统权限,其实提升权限的代码很简单的,看过的最经典的应该是《WIND...
  • liubing8609
  • liubing8609
  • 2015年01月03日 15:00
  • 2410

.NET中提升UAC权限的方法总结

从Vista开始,由于增加了UAC(用户账户控制,User Account Control)功能,使得管理员用户平时不再拥有能控制所有功能的管理员权限了,所以在调用很多比较重要的功能时需要提升权限来实...
  • Linux7985
  • Linux7985
  • 2016年01月15日 18:42
  • 2584

用户权限设置和进程权限提升

使用某些Windows API的时候需要提升进程的默认权限,例如RegRestoreKey需要SE_RESTORE_NAME 和SE_BACKUP_NAME 权限。在这种情况下,我们需要使用到一组Wi...
  • kingswb
  • kingswb
  • 2016年05月29日 22:11
  • 636

windows下c++提高程序权限

// If the caller has enabled the SeDebugPrivilege privilege, // the requested access is granted...
  • fuck487
  • fuck487
  • 2016年08月15日 15:49
  • 1617

SharePoint 权限提升的方法

普通方法 SPSecurity.RunWithElevatedPrivileges(delegate() { using (SPSite Site = new SPSite(SiteId))...
  • jason_dct
  • jason_dct
  • 2013年01月09日 10:05
  • 1230

【总结】用户权限设置和进程权限提升

使用某些Windows API的时候需要提升进程的默认权限,例如RegRestoreKey需要SE_RESTORE_NAME 和SE_BACKUP_NAME 权限。在这种情况下,我们需要使用到一组Wi...
  • yockie
  • yockie
  • 2013年11月29日 20:23
  • 16317

VC中程序提升管理员权限

程序的权限不够,应用管理员权限打开程序运行方可。 如何使vc程序运行时请求管理员权限? 如果是2005或者2008 就简单了,直接项目右键---属性---连接器---清单文件---uac执行级别 选...
  • qq_23992597
  • qq_23992597
  • 2016年08月31日 10:44
  • 1506
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:WSS 代码执行的权限提升
举报原因:
原因补充:

(最多只允许输入30个字)