当前位置: 首页 > news >正文

通过监控诊断和调试应用程序对共享目录访问可能的权限问题

事情是这样的,我们开发的一个SharePoint的流程系统,在某个客户那里部署之后,测试期间遇到一些问题。大致相关的一部分流程是这样的

1.用户发起流程之后,会有一些附件,最开始是上传到SharePoint中的一个文档库的

2.流程运行期间,大多是审批,签转,参与人可以对这些附件进行修改,通过SharePoint的多版本功能,可以为文档保存多个版本

3.当流程结束之后,我们希望将与这个流程所有的文档(及所有的版本)移动到某个共享目录存档起来。(这样做的目的是减轻SharePoint的压力)

 

这次遇到的问题是,在最后一步,将文档转移到共项目的时候,总是无法通过,报的是IOException,也就是无法写入到目录。

那么,我们是用什么身份去写这个目录的呢?

通常,在SharePoint的解决方案中,为了简化授权,我们在操作外部资源(例如数据库,或者文件夹)的时候,都会提升权限,如下所示

      [WebMethod]
        public bool CloseTicket(int ticketId)
        {
            var result = false;
            var webUrl = SPContext.Current.Web.Url;
            var DocumentLibName = "DocumentReviewTempDocumentLib";
            var Database = Global.GetDatabase();


            SPSecurity.RunWithElevatedPrivileges(delegate()
                {
                   //这里编写具体的功能
                });

            return result;
        }

这里的关键是SPSecurity.RunWithElevatedPrivileges这个方法,就是所谓提升了权限。

那么到底提升到什么权限呢?它是提升到当前Web Application所依赖的那个Application Pool的运行帐号的权限。

image

我的机器上,当前使用了一个端口为80的Web Application,它的Identity是NetworkService

那么,意思就是说,如果调用了上面那个CloseTicket方法,则不管调用者是谁,只要成功调用到了,则后续工作所使用的身份,其实都是NetworkService.

 

道理是这么讲没有错,但是事实的情况就是,我们即便在客户提供的共享目录添加了这个帐号的权限,仍然是写入失败。

那么,我们如何证明,我们确实使用了这个帐号呢?

我用了一个工具来进行监控,这是微软提供的一个Procmon.exe,就是进程监控器,这个小工具属于systeminternal套件,非常好用,赞一个

http://technet.microsoft.com/en-us/sysinternals/default.aspx

 

通过这个工具,我们稍作设置,就可以测试一下对某个目录的读写情况

image

这是相当不错的,我们可以看到,刚才发生了CreateFile事件,而且用户是NETWORK SERVICE,进程是w3wp.exe(IIS的工作进程都是这个名字),有这种工具,有监控结果,无疑是更加形象的。

 

下午还要继续协助客户调试一下看看到底他们那边是什么情况,以上记录下来给大家也参考一下

相关文章:

  • 我的第五代选择器Icarus
  • 古老的话题:成本控制
  • 使用WebLogic进行应用软件开发
  • 系统集成资质培训 - 案例分析知识点复习
  • 遇到一个很诡异的问题,求解答
  • 高度图构造地形
  • Oracle SQL的优化规则
  • 【转】FLASH Player 11.2 BETA 鼠标新特性初探及api配置
  • Poj1180 Batch Scheduling --- DP的斜率优化
  • 把成熟的代码从.NET移植到Mono 【转】
  • 使用rsync+inotify做双机实时互备
  • Xen Desktop测试报告
  • 减速机行业“十二五”标准化战略
  • 超声(PDUS)能否容易检出侵蚀?比较PDUS与microCT对正常人群和RA患者小关节生理和皮质断裂的评价...
  • [原创]一些Ubuntu的代理设置
  • 5、React组件事件详解
  • Angular2开发踩坑系列-生产环境编译
  • Java,console输出实时的转向GUI textbox
  • JavaWeb(学习笔记二)
  • Java比较器对数组,集合排序
  • Joomla 2.x, 3.x useful code cheatsheet
  • JS数组方法汇总
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • vue-router 实现分析
  • 动态魔术使用DBMS_SQL
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 开发基于以太坊智能合约的DApp
  • 聊聊sentinel的DegradeSlot
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 微信小程序:实现悬浮返回和分享按钮
  • 携程小程序初体验
  • 一、python与pycharm的安装
  • 最近的计划
  • ionic入门之数据绑定显示-1
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • #Lua:Lua调用C++生成的DLL库
  • (4.10~4.16)
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (过滤器)Filter和(监听器)listener
  • (转)jQuery 基础
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .NET 使用配置文件
  • .NET开发者必备的11款免费工具
  • .Net中的设计模式——Factory Method模式
  • :中兴通讯为何成功
  • @Autowired标签与 @Resource标签 的区别
  • [20180224]expdp query 写法问题.txt
  • [C]编译和预处理详解