Hi Brad,
Writing a valid security policy file can be a bit tricky. I am not sure
that you have identified the codebase of your jar file with a legal URL.
I would expect to see some double slashes in the URL. The following kind
of URL works for me:
grant codeBase "file:///opt/DerbyTrunk/jars/sane/derby.jar"
{
...
};
Hope this helps,
-Rick
bradm6406 wrote:
Hi,
I am trying to add a custom procedure to my Derby database that will backup
the database and then zip the resulting backup folder. I can call the
procedure with no problems and it creates the database backup using a call
to SYSCS_UTIL.SYSCS_BACKUP_DATABASE(). The problem comes when I try to zip
the resulting folder.
I took the zipping code from this URL:
http://www.acm.org/crossroads/xrds6-3/ovp63.html and added the SimpleZip
class to my package. I then added the makeZip procedure to my database. I
can call the makeZip procedure with no problems so I know it is registered
properly in Derby but I get an exception when the code tries to create the
zip file on the hard drive.
This is the error I am getting:
java.sql.SQLException: The exception 'java.security.AccessControlException:
access denied (java.io.FilePermission D:\derby_database\backups\20080215.zip
write)' was thrown while evaluating an expression.
I was assuming that I needed to add additional permissions to my policy
file, so I added this:
grant codeBase "file:${derby.system.home}${/}lib${/}DerbyHelpers.jar"
{
permission java.io.FilePermission "${derby.system.home}${/}backups${/}-",
"read,write,delete";
};
That didn't work. I still got the same error. So I decided to try creating
a new policy file that gave all permissions to everything and see what
happened. My new policy file looks like this:
// Give permissions to all of my Derby jar files, and my custom jar file
grant codeBase "file:${derby.system.home}/lib/-" {
permission java.security.AllPermission;
};
// I have a copy of the Sun JRE in d:\derby\database\java\ that I am using,
give all permissions to all of the java libraries
grant codeBase "file:D:/derby_database/java/lib/-"{
permission java.security.AllPermission;
};
This still doesn't work. Now I'm stumped. I'm very new to Java and just
struggling through it because we decided to use Derby for our program. I
would have thought that giving the FilePermissions to my custom jar file
would have worked but it isn't. Each time I made a change to the policy
file I restarted the network server just to be sure that the new policy file
has been reloaded. I am 100% sure the policy file is being used because if
I change it so that the wrapper.jar file doesn't have the needed permissions
then I get errors when starting the service using the wrapper.
If i call the makeZip function directly from Eclipse then it creates a zip
file with no problems. The error is only occurring when I am running the
code from within Derby.
Any suggestions?
Thanks,
Brad