授予 rt.jar 权限

Posted

技术标签:

【中文标题】授予 rt.jar 权限【英文标题】:Granting permissions to rt.jar 【发布时间】:2013-03-05 02:26:44 【问题描述】:

我们没有使用默认的 Java 安全策略,因为它允许我们想要禁止的事情。所以我们有自己的策略文件,通常不允许从任何地方读取...

但这意味着 rt.jar 本身无法在需要时从文件中读取,这很糟糕。

所以我添加了以下规则:

grant codeBase "file:$java.home/lib/rt.jar" 
  permission java.security.AllPermission;
;
grant codeBase "file:$java.home/jre/lib/rt.jar" 
  permission java.security.AllPermission;
;

我不确定 java.home 是否适用于 JDK 或 JRE,所以我同时设置了两者。但是当我运行测试时,当 rt.jar 尝试从文件中读取时,我仍然会遇到安全异常。

显然我做错了什么,所以我希望其他人能发现我的错字。

我试过了:

file: 之后添加/file: 之前添加jar:,在.jar 之后添加!/-

【问题讨论】:

【参考方案1】:

我认为您不能从系统类中删除权限(nullClassLoadernullProtectionDomain,所以不能删除CodeSource)。

我猜你误解了 Java 2 安全模型(很容易做到,因为没有人真正理解它)。通过检查堆栈中的所有帧(粗略地说)来完成安全检查(除了一些选择方法)。测试的每一帧都必须有权限。如果堆栈中只有一帧没有权限,则检查失败。

(在咨询AccessController 之前,您可能有一个总是拒绝某些权限的SecurityManager。)

【讨论】:

嗯......所以基本上“堆栈上的东西”没有被授予权限。我唯一能看到的可能没有被授予访问权限的是“com.intellij.rt.execution.application.AppMain”......我不确定我是否有办法解决那个问题。

以上是关于授予 rt.jar 权限的主要内容,如果未能解决你的问题,请参考以下文章

oracle 创建用户授予权限问题

MySQL 查看用户授予的权限

MySQL的安全设置

oracle怎么创建用户和授予权限

在授予权限之前调用的请求权限方法

如何授予 Kivy android 脚本的权限?