调度程序作业没有足够的权限写入 svn
Scheduler Job did not have enough permission to write to the svn
我有一个调度程序每 5 分钟执行一次的作业脚本。此脚本搜索特定的工作项并更改它们。如果我手动执行脚本,该脚本运行良好,因为那时我是“当前用户”并且有足够的权限在 svn 中写入。但是如果调度程序执行它,当前用户是:“polarion”并且他没有对 svn 的写入权限,这有点奇怪但没关系。
错误是:
Caused by: com.polarion.platform.service.repository.driver.DriverException: Sorry, you do not have access to the Subversion Repository. Please contact your Polarion or Subversion administrator if you need access.
at com.polarion.platform.repository.driver.svn.internal.JavaSvnDriver.handleSVNException(JavaSvnDriver.java:1732)
at com.polarion.platform.repository.driver.svn.internal.JavaSvnDriver.endActivityImpl(JavaSvnDriver.java:1564)
at com.polarion.platform.repository.driver.svn.internal.JavaSvnDriver.endActivity(JavaSvnDriver.java:1496)
at com.polarion.platform.internal.service.repository.Connection.commit(Connection.java:736)
... 42 more
Caused by: org.tmatesoft.svn.core.SVNAuthenticationException: svn: E170001: CHECKOUT of '/repo/!svn/ver/54/Sandbox/7023/.polarion/tracker/workitems/100-199/7023-193/workitem.xml': 403 Forbidden (http://localhost)
at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.error(SVNErrorManager.java:68)
我在用户管理中找不到用户“polarion”,所以我不能给他更多的权限。
是否可以从其他用户或类似的东西执行写访问?
用户“polarion”在内部用于从 Polarion 的 SVN 存储库中读取信息。它通常不会写入(“提交”)到存储库中,因为这通常是在登录用户的用户帐户下完成的。
您的问题有两种解决方案:
快速简单的解决方法:修改svn access文件,让polarion用户对版本库有写入权限。这很容易从 Polarion 本身使用内置访问编辑器在管理-> 用户管理-> 访问管理下实现。这可能是不安全的,因为 polarion 用户的密码在服务器上的配置文件中以明文形式存在,因此任何有权访问服务器的人都可以修改 SVN-Repository。
使用 ISecurityService.doAsUser(..) 函数以不同用户的身份执行您的操作。通常,您可以将凭据放入 Polarion Vault 中以在不暴露用户名和密码的情况下检索它们。
这是一个例子:
subject = securityService.loginUserFromVault(vaultKey, vaultKey);
retVal = securityService.doAsUser(subject, new PrivilegedAction<Object>() {
public Object run() {
Object ret = null;
try {
ret = doAction();
return ret;
}
}
});
不用说第二种方法是更安全的工作方式,但它也更费力:)
我有一个调度程序每 5 分钟执行一次的作业脚本。此脚本搜索特定的工作项并更改它们。如果我手动执行脚本,该脚本运行良好,因为那时我是“当前用户”并且有足够的权限在 svn 中写入。但是如果调度程序执行它,当前用户是:“polarion”并且他没有对 svn 的写入权限,这有点奇怪但没关系。 错误是:
Caused by: com.polarion.platform.service.repository.driver.DriverException: Sorry, you do not have access to the Subversion Repository. Please contact your Polarion or Subversion administrator if you need access.
at com.polarion.platform.repository.driver.svn.internal.JavaSvnDriver.handleSVNException(JavaSvnDriver.java:1732)
at com.polarion.platform.repository.driver.svn.internal.JavaSvnDriver.endActivityImpl(JavaSvnDriver.java:1564)
at com.polarion.platform.repository.driver.svn.internal.JavaSvnDriver.endActivity(JavaSvnDriver.java:1496)
at com.polarion.platform.internal.service.repository.Connection.commit(Connection.java:736)
... 42 more
Caused by: org.tmatesoft.svn.core.SVNAuthenticationException: svn: E170001: CHECKOUT of '/repo/!svn/ver/54/Sandbox/7023/.polarion/tracker/workitems/100-199/7023-193/workitem.xml': 403 Forbidden (http://localhost)
at org.tmatesoft.svn.core.internal.wc.SVNErrorManager.error(SVNErrorManager.java:68)
我在用户管理中找不到用户“polarion”,所以我不能给他更多的权限。 是否可以从其他用户或类似的东西执行写访问?
用户“polarion”在内部用于从 Polarion 的 SVN 存储库中读取信息。它通常不会写入(“提交”)到存储库中,因为这通常是在登录用户的用户帐户下完成的。 您的问题有两种解决方案:
快速简单的解决方法:修改svn access文件,让polarion用户对版本库有写入权限。这很容易从 Polarion 本身使用内置访问编辑器在管理-> 用户管理-> 访问管理下实现。这可能是不安全的,因为 polarion 用户的密码在服务器上的配置文件中以明文形式存在,因此任何有权访问服务器的人都可以修改 SVN-Repository。
使用 ISecurityService.doAsUser(..) 函数以不同用户的身份执行您的操作。通常,您可以将凭据放入 Polarion Vault 中以在不暴露用户名和密码的情况下检索它们。 这是一个例子:
subject = securityService.loginUserFromVault(vaultKey, vaultKey); retVal = securityService.doAsUser(subject, new PrivilegedAction<Object>() { public Object run() { Object ret = null; try { ret = doAction(); return ret; } } });
不用说第二种方法是更安全的工作方式,但它也更费力:)