Hi all - the work of Fuseki and security is nearly ready to merge to master so here is a brief overview of what has become a large PR (sorry about that).

Jena 3.9.0 introduced a library to for graph-level security (module jena-fuseki-access). This work adds user authentication, https, and support for access control on the server as a whole and on databases.

JENA-1594 : Provide per-graph access control in Fuseki
JENA-1623 : Access control of server and services
JENA-1627 : HTTPS support
PR#486: https://github.com/apache/jena/pull/486

Most of this is relying on Jetty features and packaging them up to make them easier to use in the context of Fuseki.

* https support.

Because data transfer over unencrypted HTTP is not a good thing if you wanted to restrict access to the data in any way.

* Users and passwords.

Basic and Digest auth supported; the server defaults to digest auth. that might have to change because in my experience simple scripts work with basic auth - it is the default with curl and wget.

The code provides password file support - for more complex integrations into a deployment environment, e.g. SSO, LDAP, access to the Jetty features is easily available. If there are common patterns, better support can be added later but for now it's standalone user/passwd or extension in Java code.

* Access control for the server

The server can be set to require an authenticated user.

* Access control for the services

This can also be applied to individual services.

These two are probably the most useful part of the new features for general use.

A deployed server can have different access control lists on the server itself, and on various databases (a user has to satisfy all restrictions).

There is no per-endpoint security ATM - something to add later. The same dataset can be shared between different services with different access control lists.

* Graph-level access control.

This only applies to a read-only database. There are per-user access control lists; the union graph is all named graphs the user has access to.

When used with TDB, the implementation uses TDB tuple filtering so it is efficient. In the general case, it is a specially created view of the dataset which is functionally correct but will call back to general query execution, and for expensive queries may well be observable less efficient.

Updates can be done under different access control via a different set of service endpoints over the same shared TDB database.

    Andy

Unrelated small things : these are small fixes of things I came across or have been mentioned recently during the lifetime of this PR which got fixed:

JENA-1625 : Update DynamicDatasets.
JENA-1626 : Txn improvements.
JENA-1631 : Use DatasetGraphMapLink transactions.
JENA-1629 : Print CONSTRUCT Quads executions.
JENA-1632 : https support in SOH scripts.

Reply via email to