Hola,
Esas son tres cosas diferentes, una es encriptación de los datos (con el fin de que nadie pueda ver la información, aunque tenga acceso físico pero no autorizado a dichos datos), otra es la autenticación del los usuarios (con el fin de indicar quien es quien) y la otra son los permisos (saber quien puede accesar qué cosa).
Eso se divide en varios niveles, de los cuales, dependiendo del nivel de seguridad que quieras implementar tendrás que llevar a cabo; entre los cuales existen:
- Encriptar físicamente los datos de la base de datos (como el vínculo que mostraste).
- Crear los usuarios lógicos de la base de datos, (en este caso la autenticación la hace la base de datos, pero tendrías que darle permiso a cada objeto de la base de datos por usuario o grupos de trabajo).
- Crear tu tabla de usuario con permisos, encriptando la contraseña, independientemente de la encriptación de la base de datos. En este caso, posiblemente, solamente tendrías que crear un usuario lógico de la base de datos para autenticar ante Derby, y usar este en todas la conexiones.
O implementar una mezcla que mejor se adapte a tus necesidades. En el caso de las bases de datos embebidas y que posiblemente van a estar los datos físicos al alcance de los usuarios del sistema operativo, posiblemente también tendrás que ver los permisos de los usuarios del sistema operativo hacia la ubicación física de los archivos de Derby.
Un detalle a tomar en cuenta es que la complejidad de la seguridad es inversamente proporcional a la facilidad de instalación y mantenimiento de un sistema.
Todo lo que necesitas para implementar cualquiera de las opciones lo encuentras en las librerías de Java y Apache Derby, no necesitas ninguna librería adicional. Aunque podrías investigar sobre Apache Codec, Spring Framework, y otras librerías que te van a facilitar el desarrollo, aunque de nuevo, la curva de aprendizaje de nuevas librerías va a ser proporcional a la complejidad de lo que quieras realizar.
Saludos,