TFS 2018本地版权限审计:如何生成代码变更权限证明报告?
生成TFS 2018源代码仓库权限报告的可行方案
针对你需要给审计部门提供源代码仓库可修改人员权限证明的需求,我整理了两种方案——优先用TFS原生标准功能(避免审计质疑),如果需要更定制化的内容再用自定义方法:
一、TFS标准功能生成报告(强烈推荐)
TFS 2018自带的功能完全能生成符合要求的权限报告,审计部门不会挑毛病:
1. Web界面直接导出Excel报告
这是最简单的方式,几步就能拿到完整权限清单:
- 打开你的TFS Web门户,进入目标团队项目,点击「代码」选择对应的源代码仓库
- 右上角点齿轮图标(设置),选择「仓库权限」
- 在权限列表页面,右上角有个Excel样式的「导出」按钮,点击后会直接下载一份Excel文件,里面包含所有用户/组的权限详情——重点看「Contribute」权限项,这就是签入权限,表格里会明确标注权限是允许、拒绝还是继承来的,完全满足审计要求
2. 用TFS Power Tools的权限分析器
TFS Power Tools是微软官方出的配套工具,属于标准扩展,审计不会质疑:
- 先安装TFS 2018 Power Tools(微软官方提供的官方配套工具)
- 打开工具里的「Permission Explorer」,连接到你的本地TFS服务器
- 定位到目标源代码仓库(可以选整个仓库或者特定分支),然后点击导出,就能生成一份详细的权限报告,里面会列出所有权限项,你可以重点筛选「Contribute」(签入)相关的内容
二、自定义方案(当标准功能不够用的时候)
如果审计需要更定制化的内容,比如只导出有签入权限的用户,或者要和其他系统数据整合,可以试试这两种方法:
1. PowerShell脚本调用TFS REST API
写个简单的PowerShell脚本就能筛选出你要的权限信息,示例如下:
# 替换成你的TFS信息 $tfsUrl = "http://你的TFS服务器地址:8080/tfs/集合名称" $projectName = "你的项目名" $repoName = "你的仓库名" # 获取仓库ID $repoId = (Invoke-RestMethod -Uri "$tfsUrl/$projectName/_apis/git/repositories?api-version=4.1" -Method Get).value | Where-Object { $_.name -eq $repoName } | Select-Object -ExpandProperty id # 获取该仓库的所有权限 $permissions = Invoke-RestMethod -Uri "$tfsUrl/_apis/accesscontrolentries/2e9eb7ed-3c0a-47d4-87c1-0ffdd275fd87?token=repoV2/$repoId&api-version=4.1" -Method Get # 筛选拥有签入权限(Contribute,对应权限位2)的条目 $checkinPermissions = $permissions.value | Where-Object { $_.allow -band 2 } # 输出结果,可以导出到CSV $checkinPermissions | Select-Object identityDisplayName, allow, deny | Export-Csv -Path "签入权限报告.csv" -NoTypeInformation
小提示:权限位
2对应「Contribute」权限,如果需要同时筛选其他权限,比如编辑分支权限,可以叠加对应的权限位数值
2. 直接查询TFS数据库(仅限特殊场景)
如果上述方法都不行,你可以直接查TFS的仓库数据库,但一定要确保有合法的数据库访问权限,并且遵循公司的合规流程:
SELECT i.DisplayName AS 用户/组名称, p.PermissionName AS 权限名称, CASE WHEN ace.Allow = 1 THEN '允许' ELSE '拒绝' END AS 权限状态 FROM tbl_AccessControlEntry ace JOIN tbl_Identity i ON ace.IdentityId = i.IdentityId JOIN tbl_Permission p ON ace.PermissionId = p.PermissionId WHERE ace.Token LIKE 'repoV2/%你的仓库ID%' AND p.PermissionName = 'Contribute' -- 筛选签入权限
注意:仓库ID可以通过TFS Web界面的仓库URL或者REST API获取,不要随便修改数据库,只读查询即可
内容的提问来源于stack exchange,提问作者Jason Robbins
相关产品推荐
相关产品推荐

