You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by bu...@apache.org on 2015/02/15 16:52:47 UTC

svn commit: r940251 - in /websites/staging/jena/trunk/content: ./ documentation/security/example.html

Author: buildbot
Date: Sun Feb 15 15:52:47 2015
New Revision: 940251

Log:
Staging update by buildbot for jena

Added:
    websites/staging/jena/trunk/content/documentation/security/example.html
Modified:
    websites/staging/jena/trunk/content/   (props changed)

Propchange: websites/staging/jena/trunk/content/
------------------------------------------------------------------------------
--- cms:source-revision (original)
+++ cms:source-revision Sun Feb 15 15:52:47 2015
@@ -1 +1 @@
-1659916
+1659931

Added: websites/staging/jena/trunk/content/documentation/security/example.html
==============================================================================
--- websites/staging/jena/trunk/content/documentation/security/example.html (added)
+++ websites/staging/jena/trunk/content/documentation/security/example.html Sun Feb 15 15:52:47 2015
@@ -0,0 +1,313 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE- 2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+
+  <title>Apache Jena - Adding Jena-Security to Fuseki.</title>
+  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+  <link href="/css/bootstrap.min.css" rel="stylesheet" media="screen">
+  <link href="/css/bootstrap-extension.css" rel="stylesheet" type="text/css">
+  <link href="/css/jena.css" rel="stylesheet" type="text/css">
+  <link rel="shortcut icon" href="/images/favicon.ico" />
+  
+  <script src="https://code.jquery.com/jquery-2.0.3.min.js"></script>
+  <script src="/js/jena-navigation.js" type="text/javascript"></script>
+  <script src="/js/bootstrap.min.js" type="text/javascript"></script>
+  <script src="/js/breadcrumbs.js" type="text/javascript"></script>
+
+  <script src="/js/improve.js" type="text/javascript"></script>
+
+  
+  <!-- Uncomment to enable code coloring <link href="/css/codehilite.css" rel="stylesheet" type="text/css"> -->
+
+</head>
+
+<body>
+
+
+
+<nav class="navbar navbar-default" role="navigation">
+<div class="container">
+  <div class="navbar-header">
+  
+    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse">
+      <span class="icon-bar"></span>
+      <span class="icon-bar"></span>
+      <span class="icon-bar"></span>
+    </button>
+    <a class="navbar-brand" href="/index.html">
+    <img class="logo-menu" src="/images/jena-logo/jena-logo-notext-small.png" alt="jena logo">Apache Jena</a>
+  </div>
+ 
+  <div class="collapse navbar-collapse navbar-ex1-collapse">
+    <ul class="nav navbar-nav">
+              <li id="homepage"><a href="/index.html"><span class="glyphicon glyphicon-home"></span> Home</a></li>
+              <li id="download"><a href="/download/index.cgi"><span class="glyphicon glyphicon-download-alt"></span> Download</a></li>
+              <li class="dropdown">
+                <a href="#" class="dropdown-toggle" data-toggle="dropdown"><span class="glyphicon glyphicon-book"></span> Learn <b class="caret"></b></a>
+                <ul class="dropdown-menu">
+                  <li class="dropdown-header">Tutorials</li>
+                  <li><a href="/tutorials/index.html">Overview</a></li>
+                  <li><a href="/tutorials/rdf_api.html">RDF core API tutorial</a></li>
+                  <li><a href="/tutorials/sparql.html">SPARQL tutorial</a></li>
+                  <li><a href="/documentation/query/manipulating_sparql_using_arq.html">Manipulating SPARQL using ARQ</a></li>
+                  <li><a href="/tutorials/using_jena_with_eclipse.html">Using Jena with Eclipse</a></li>
+                  <li><a href="/documentation/notes/index.html">How-To's</a></li>
+                  <li class="divider"></li>
+                  <li class="dropdown-header">References</li>
+                  <li><a href="/documentation/index.html">Overview</a></li>
+                  <li><a href="/documentation/javadoc/">Javadoc</a></li>
+                  <li><a href="/documentation/rdf/index.html">RDF API</a></li>
+                  <li><a href="/documentation/io/">RDF I/O</a></li>
+                  <li><a href="/documentation/query/index.html">ARQ (SPARQL)</a></li>
+                  <li><a href="/documentation/query/text-query.html">Text Search</a></li>
+                  <li><a href="/documentation/tdb/index.html">TDB</a></li>
+		  <li><a href="/documentation/sdb/index.html">SDB</a></li>
+		  <li><a href="/documentation/jdbc/index.html">SPARQL over JDBC</a></li>
+		  <li><a href="/documentation/security/index.html">Security</a></li>
+                  <li><a href="/documentation/serving_data/index.html">Fuseki</a></li>
+                  <li><a href="/documentation/assembler/index.html">Assembler</a></li>
+                  <li><a href="/documentation/ontology/">Ontology API</a></li>
+                  <li><a href="/documentation/inference/index.html">Inference API</a></li>
+                  <li><a href="/documentation/tools/index.html">Command-line tools</a></li>
+                  <li><a href="/documentation/extras/index.html">Extras</a></li>
+                </ul>
+              </li>
+
+              <li class="drop down">
+                <a href="#" class="dropdown-toggle" data-toggle="dropdown"><span class="glyphicon glyphicon-book"></span> Javadoc <b class="caret"></b></a>
+                <ul class="dropdown-menu">
+                  <li><a href="/documentation/javadoc/jena/">Jena Core</a></li>
+                  <li><a href="/documentation/javadoc/arq/">ARQ</a></li>
+                  <li><a href="/documentation/javadoc/tdb/">TDB</a></li>
+                  <li><a href="/documentation/javadoc/text/">Text Search</a></li>
+                  <li><a href="/documentation/javadoc/spatial/">Spatial Search</a></li>
+                  <li><a href="/documentation/javadoc/security/">Security</a></li>
+                  <li><a href="/documentation/javadoc/jdbc/">JDBC</a></li>
+                  <li><a href="/documentation/javadoc/fuseki/">Fuseki</a></li>
+                </ul>
+              </li>
+
+              <li id="ask"><a href="/help_and_support/index.html"><span class="glyphicon glyphicon-question-sign"></span> Ask</a></li>
+              
+              <li class="dropdown">
+                <a href="#" class="dropdown-toggle" data-toggle="dropdown"><span class="glyphicon glyphicon-bullhorn"></span> Get involved <b class="caret"></b></a>
+                <ul class="dropdown-menu">
+                  <li><a href="/getting_involved/index.html">Contribute</a></li>
+                  <li><a href="/help_and_support/bugs_and_suggestions.html">Report a bug</a></li>
+                  <li class="divider"></li>
+                  <li class="dropdown-header">Project</li>
+                  <li><a href="/about_jena/about.html">About Jena</a></li>
+                  <li><a href="/about_jena/roadmap.html">Roadmap</a></li>
+                  <li><a href="/about_jena/architecture.html">Architecture</a></li>
+                  <li><a href="/about_jena/team.html">Project team</a></li>
+                  <li><a href="/about_jena/contributions.html">Related projects</a></li>
+                  <li class="divider"></li>
+                  <li class="dropdown-header">ASF</li>
+                  <li><a href="http://www.apache.org/">Apache Software Foundation</a></li>
+                  <li><a href="http://www.apache.org/licenses/LICENSE-2.0">License</a></li>
+                  <li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li>
+                  <li><a href="http://www.apache.org/foundation/sponsorship.html">Become a Sponsor</a></li>
+                  <li><a href="http://www.apache.org/security/">Security</a></li>
+                </ul>
+              </li>
+
+              <li id="edit"><a href="javascript:improveThisPage(location.href);" title="Improve this Page (Use username anonymous and empty password)"><span class="glyphicon glyphicon-pencil"></span> Improve this Page</a></li>   
+    </ul>
+  </div>
+</div>
+</nav>
+
+
+<div class="container">
+	<div class="row">
+	<div class="col-md-12">
+	<div id="breadcrumbs"></div>
+	<h1 class="title">Adding Jena-Security to Fuseki.</h1>
+  <h2 id="overview">Overview</h2>
+<p>The goal of this document is to add jena-security to a fuseki deployment to restrict access to graph data.  This example will take the jena-security example application, deploy the data to a fuseki instance and add the jena-security to achieve the same access restrictions that the example  application has.</p>
+<p>To do this you will need a Fuseki installation, the Security Packages and a SecurityEvaluator implementation.  For this example we will use the SecurityEvaluator from the Security-Examples.</p>
+<h2 id="set-up">Set up</h2>
+<p>This example uses Fuseki 2.0.0-SNAPSHOT, and Security 2.12.2-SNAPSHOT and Apache Commons Collections v4.  If you are using an earlier Security version you will need to download the source code to compile the example.</p>
+<p>Fuseki can be downloaded from: 
+[https://repository.apache.org/content/repositories/snapshots/org/apache/jena/apache-jena-fuseki/]</p>
+<p>Jena Security jars can be downloaded from: 
+[https://repository.apache.org/content/repositories/snapshots/org/apache/jena/jena-security/]</p>
+<ol>
+<li>
+<p>Download and unpack Fuseki.  The directory that you unpack Fuseki into will be referred to as the <code>Fuseki Home</code> directory for the remainder of this document.</p>
+</li>
+<li>
+<p>Download Security 2.12.2 jar and 2.12.2 security-example jar.</p>
+</li>
+<li>
+<p>Copy the Security jar and the Security example jar into the Fuseki Home directory.  For the rest of this document the security jar will be referred to as <code>security.jar</code> and the security-example.jar as <code>example.jar</code></p>
+</li>
+<li>
+<p>Download the Apache Commons Collections v4
+[http://commons.apache.org/proper/commons-collections/download_collections.cgi]
+Uncompress the <code>commons-collections*.jar</code> into the <code>Fuseki Home</code> directory.</p>
+</li>
+<li>
+<p>Add security jars to the startup script/batch file.</p>
+</li>
+<li>
+<p>On *NIX edit fuseki-server script </p>
+</li>
+</ol>
+<p>comment out the line that reads <code>exec java  $JVM_ARGS -jar "$JAR" "$@"</code>
+uncomment the last two lines that read:</p>
+<div class="codehilite"><pre><span class="cp"> ##   APPJAR=MyCode.jar</span>
+<span class="cp"> ##   java $JVM_ARGS -cp &quot;$JAR:$APPJAR&quot; org.apache.jena.fuseki.cmd.FusekiCmd &quot;$@&quot;</span>
+</pre></div>
+
+
+<p>change <code>MyCode.jar</code> to <code>security.jar:example.jar:commons-collections*.jar</code></p>
+<ul>
+<li>On Windows edit fuseki-server.bat file </li>
+</ul>
+<p>comment out the line that reads <code>java -Xmx1200M -jar fuseki-server.jar %*</code>
+uncomment the line that reads
+<code>@REM  java ... -cp fuseki-server.jar;MyCustomCode.jar org.apache.jena.fuseki.cmd.FusekiCmd %*</code></p>
+<p>change <code>MyCustomCode.jar</code> to <code>security.jar;example.jar;commons-collections*.jar</code></p>
+<ol>
+<li>
+<p>run the fuseki-server script or batch file.</p>
+</li>
+<li>
+<p>Stop the server. </p>
+</li>
+<li>
+<p>Extract teh example configuration into the newly created <code>Fuseki Home/run</code> directory.
+From the example.jar archive extract </p>
+</li>
+<li><code>/org/apache/jena/security/example/example.ttl</code> into the <code>Fuseki Home/run</code> directory</li>
+<li><code>/org/apache/jena/security/example/fuseki/config.ttl</code> into the <code>Fuseki Home/run</code> directory</li>
+<li>
+<p><code>/org/apache/jena/security/example/fuseki/shiro.ini</code> into the <code>Fuseki Home/run</code> directory</p>
+</li>
+<li>
+<p>run <code>fuseki-server –config=run/config.ttl</code> or <code>fuseki-server.bat –config=run/config.ttl</code></p>
+</li>
+</ol>
+<h2 id="review-of-configuration">Review of configuration</h2>
+<p>At this point the system is configured with the following logins:</p>
+<table>
+<tr><th>Login</th><th>password</th><th>Access to</th></tr>
+<tr><td>admin</td><td>admin</td></td>Everything</td></tr>
+<tr><td>alice</td><td>alice</td></td>Only messages to or from alice</td></tr>
+<tr><td>bob</td><td>bob</td></td>Only messages to or from bob</td></tr>
+<tr><td>chuck</td><td>chuck</td></td>Only messages to or from chuck</td></tr>
+<tr><td>darla</td><td>darla</td></td>Only messages to or from darla</td></tr>
+</table>
+
+<p>The messages graph is defined in the run/example.ttl file.</p>
+<p>The run/shiro.ini file lists the users and their passwords and restricts access to the graphs.</p>
+<p>The run.config.ttl file adds the security to the graph as follows:</p>
+<p>Define all the prefixes </p>
+<div class="codehilite"><pre><span class="p">@</span><span class="n">prefix</span> <span class="n">fuseki</span><span class="p">:</span>  <span class="o">&lt;</span><span class="n">http</span><span class="p">:</span><span class="o">//</span><span class="n">jena</span><span class="p">.</span><span class="n">apache</span><span class="p">.</span><span class="n">org</span><span class="o">/</span><span class="n">fuseki</span>#<span class="o">&gt;</span> <span class="p">.</span>
+<span class="p">@</span><span class="n">prefix</span> <span class="n">tdb</span><span class="p">:</span>     <span class="o">&lt;</span><span class="n">http</span><span class="p">:</span><span class="o">//</span><span class="n">jena</span><span class="p">.</span><span class="n">hpl</span><span class="p">.</span><span class="n">hp</span><span class="p">.</span><span class="n">com</span><span class="o">/</span>2008<span class="o">/</span><span class="n">tdb</span>#<span class="o">&gt;</span> <span class="p">.</span>
+<span class="p">@</span><span class="n">prefix</span> <span class="n">rdf</span><span class="p">:</span>     <span class="o">&lt;</span><span class="n">http</span><span class="p">:</span><span class="o">//</span><span class="n">www</span><span class="p">.</span><span class="n">w3</span><span class="p">.</span><span class="n">org</span><span class="o">/</span>1999<span class="o">/</span>02<span class="o">/</span>22<span class="o">-</span><span class="n">rdf</span><span class="o">-</span><span class="n">syntax</span><span class="o">-</span><span class="n">ns</span>#<span class="o">&gt;</span> <span class="p">.</span>
+<span class="p">@</span><span class="n">prefix</span> <span class="n">rdfs</span><span class="p">:</span>    <span class="o">&lt;</span><span class="n">http</span><span class="p">:</span><span class="o">//</span><span class="n">www</span><span class="p">.</span><span class="n">w3</span><span class="p">.</span><span class="n">org</span><span class="o">/</span>2000<span class="o">/</span>01<span class="o">/</span><span class="n">rdf</span><span class="o">-</span><span class="n">schema</span>#<span class="o">&gt;</span> <span class="p">.</span>
+<span class="p">@</span><span class="n">prefix</span> <span class="n">ja</span><span class="p">:</span>      <span class="o">&lt;</span><span class="n">http</span><span class="p">:</span><span class="o">//</span><span class="n">jena</span><span class="p">.</span><span class="n">hpl</span><span class="p">.</span><span class="n">hp</span><span class="p">.</span><span class="n">com</span><span class="o">/</span>2005<span class="o">/</span>11<span class="o">/</span><span class="n">Assembler</span>#<span class="o">&gt;</span> <span class="p">.</span>
+<span class="p">@</span><span class="n">prefix</span> <span class="nb">sec</span><span class="p">:</span>    <span class="o">&lt;</span><span class="n">http</span><span class="p">:</span><span class="o">//</span><span class="n">apache</span><span class="p">.</span><span class="n">org</span><span class="o">/</span><span class="n">jena</span><span class="o">/</span><span class="n">security</span><span class="o">/</span><span class="n">Assembler</span>#<span class="o">&gt;</span> <span class="p">.</span>
+<span class="p">@</span><span class="n">prefix</span> <span class="n">my</span><span class="p">:</span>     <span class="o">&lt;</span><span class="n">http</span><span class="p">:</span><span class="o">//</span><span class="n">example</span><span class="p">.</span><span class="n">org</span><span class="o">/</span>#<span class="o">&gt;</span> <span class="p">.</span>
+</pre></div>
+
+
+<p>Load the SecuredAssembler class from the security library and define the sec:Model as a subclass of ja:NamedModel.</p>
+<div class="codehilite"><pre><span class="p">[]</span> <span class="n">ja</span><span class="p">:</span><span class="n">loadClass</span>    &quot;<span class="n">org</span><span class="p">.</span><span class="n">apache</span><span class="p">.</span><span class="n">jena</span><span class="p">.</span><span class="n">security</span><span class="p">.</span><span class="n">SecuredAssembler</span>&quot; <span class="p">.</span>
+<span class="nb">sec</span><span class="p">:</span><span class="n">Model</span>       <span class="n">rdfs</span><span class="p">:</span><span class="n">subClassOf</span>  <span class="n">ja</span><span class="p">:</span><span class="n">NamedModel</span> <span class="p">.</span>
+</pre></div>
+
+
+<p>Define the base model that contains the unsecured data.</p>
+<div class="codehilite"><pre><span class="n">my</span><span class="o">:</span><span class="n">baseModel</span> <span class="n">rdf</span><span class="o">:</span><span class="n">type</span> <span class="n">ja</span><span class="o">:</span><span class="n">MemoryModel</span><span class="o">;</span>
+    <span class="n">ja</span><span class="o">:</span><span class="n">content</span> <span class="o">[</span><span class="n">ja</span><span class="o">:</span><span class="n">externalContent</span> <span class="o">&lt;</span><span class="n">file</span><span class="o">:./</span><span class="n">example</span><span class="o">.</span><span class="na">ttl</span><span class="o">&gt;]</span> 
+    <span class="o">.</span>
+</pre></div>
+
+
+<p>Define the secured model.  This is where permissions is applied to the my:baseModel to create a model that has permission restrictions.  Note that it is using the security evaluator implementation (sec:evaluatorImpl) called my:secEvaluator which we will define next.</p>
+<div class="codehilite"><pre><span class="n">my</span><span class="o">:</span><span class="n">securedModel</span> <span class="n">rdf</span><span class="o">:</span><span class="n">type</span> <span class="n">sec</span><span class="o">:</span><span class="n">Model</span> <span class="o">;</span>
+    <span class="n">sec</span><span class="o">:</span><span class="n">baseModel</span> <span class="n">my</span><span class="o">:</span><span class="n">baseModel</span> <span class="o">;</span>
+    <span class="n">ja</span><span class="o">:</span><span class="n">modelName</span> <span class="s2">&quot;https://example.org/securedModel&quot;</span> <span class="o">;</span>
+    <span class="n">sec</span><span class="o">:</span><span class="n">evaluatorImpl</span> <span class="n">my</span><span class="o">:</span><span class="n">secEvaluator</span> <span class="o">.</span>
+</pre></div>
+
+
+<p>Define the security evaluator.  This is where we use the example ShiroExampleEvaluator.  For your production environment you will replace "org.apache.jena.security.example.ShiroExampleEvaluator"  with your SecurityEvaluator implementation.  Note that  ShiroExampleEvaluator constructor takes a Model argument.  We pass in the unsecured baseModel so that the evaluator can read it unencumbered.  Your implementation of SecurityEvaluator may have different parameters to meet your specific needs.</p>
+<div class="codehilite"><pre><span class="n">my</span><span class="o">:</span><span class="n">secEvaluator</span> <span class="n">rdf</span><span class="o">:</span><span class="n">type</span> <span class="n">sec</span><span class="o">:</span><span class="n">Evaluator</span> <span class="o">;</span>
+    <span class="n">sec</span><span class="o">:</span><span class="n">args</span> <span class="o">[</span>  
+        <span class="n">rdf</span><span class="o">:</span><span class="n">_1</span> <span class="n">my</span><span class="o">:</span><span class="n">baseModel</span> <span class="o">;</span>
+    <span class="o">]</span> <span class="o">;</span>
+    <span class="n">sec</span><span class="o">:</span><span class="n">evaluatorClass</span> <span class="s2">&quot;org.apache.jena.security.example.ShiroExampleEvaluator&quot;</span> <span class="o">.</span>
+</pre></div>
+
+
+<p>Define the dataset that we will use for in the server.</p>
+<div class="codehilite"><pre><span class="n">my</span><span class="o">:</span><span class="n">securedDataset</span> <span class="n">rdf</span><span class="o">:</span><span class="n">type</span> <span class="n">ja</span><span class="o">:</span><span class="n">RDFDataset</span> <span class="o">;</span>
+    <span class="n">ja</span><span class="o">:</span><span class="n">defaultGraph</span> <span class="n">my</span><span class="o">:</span><span class="n">securedModel</span> <span class="o">.</span>
+</pre></div>
+
+
+<p>Define the fuseki:Server.</p>
+<div class="codehilite"><pre><span class="n">my</span><span class="o">:</span><span class="n">fuskei</span> <span class="n">rdf</span><span class="o">:</span><span class="n">type</span> <span class="n">fuseki</span><span class="o">:</span><span class="n">Server</span> <span class="o">;</span>
+    <span class="n">fuseki</span><span class="o">:</span><span class="n">services</span> <span class="o">(</span>
+        <span class="n">my</span><span class="o">:</span><span class="n">service1</span>
+    <span class="o">)</span> <span class="o">.</span>
+</pre></div>
+
+
+<p>Define the service for the fuseki:Service.  Note that the fuseki:dataset served by this server is the secured dataset defined above.</p>
+<div class="codehilite"><pre><span class="n">my</span><span class="o">:</span><span class="n">service1</span> <span class="n">rdf</span><span class="o">:</span><span class="n">type</span> <span class="n">fuseki</span><span class="o">:</span><span class="n">Service</span> <span class="o">;</span>
+    <span class="n">rdfs</span><span class="o">:</span><span class="n">label</span>                        <span class="s2">&quot;My Secured Data Service&quot;</span> <span class="o">;</span>
+    <span class="n">fuseki</span><span class="o">:</span><span class="n">name</span>                       <span class="s2">&quot;myAppFuseki&quot;</span> <span class="o">;</span>       <span class="err">#</span> <span class="n">http</span><span class="o">://</span><span class="n">host</span><span class="o">:</span><span class="n">port</span><span class="o">/</span><span class="n">myAppFuseki</span>
+    <span class="n">fuseki</span><span class="o">:</span><span class="n">serviceQuery</span>               <span class="s2">&quot;query&quot;</span> <span class="o">;</span>    <span class="err">#</span> <span class="n">SPARQL</span> <span class="n">query</span> <span class="n">service</span>
+    <span class="n">fuseki</span><span class="o">:</span><span class="n">serviceQuery</span>               <span class="s2">&quot;sparql&quot;</span> <span class="o">;</span>   <span class="err">#</span> <span class="n">SPARQL</span> <span class="n">query</span> <span class="n">service</span>
+    <span class="n">fuseki</span><span class="o">:</span><span class="n">serviceUpdate</span>              <span class="s2">&quot;update&quot;</span> <span class="o">;</span>   <span class="err">#</span> <span class="n">SPARQL</span> <span class="n">query</span> <span class="n">service</span>
+    <span class="n">fuseki</span><span class="o">:</span><span class="n">serviceUpload</span>              <span class="s2">&quot;upload&quot;</span> <span class="o">;</span>   <span class="err">#</span> <span class="n">Non</span><span class="o">-</span><span class="n">SPARQL</span> <span class="n">upload</span> <span class="n">service</span>
+    <span class="n">fuseki</span><span class="o">:</span><span class="n">serviceReadWriteGraphStore</span> <span class="s2">&quot;data&quot;</span> <span class="o">;</span>     <span class="err">#</span> <span class="n">SPARQL</span> <span class="n">Graph</span> <span class="n">store</span> <span class="n">protocol</span> <span class="o">(</span><span class="n">read</span> <span class="n">and</span> <span class="n">write</span><span class="o">)</span>
+    <span class="err">#</span> <span class="n">A</span> <span class="n">separate</span> <span class="n">ead</span><span class="o">-</span><span class="n">only</span> <span class="n">graph</span> <span class="n">store</span> <span class="n">endpoint</span><span class="o">:</span>
+    <span class="n">fuseki</span><span class="o">:</span><span class="n">serviceReadGraphStore</span>      <span class="s2">&quot;get&quot;</span> <span class="o">;</span>      <span class="err">#</span> <span class="n">SPARQL</span> <span class="n">Graph</span> <span class="n">store</span> <span class="n">protocol</span> <span class="o">(</span><span class="n">read</span> <span class="n">only</span><span class="o">)</span>
+    <span class="n">fuseki</span><span class="o">:</span><span class="n">dataset</span>                   <span class="n">my</span><span class="o">:</span><span class="n">securedDataset</span> <span class="o">;</span>
+<span class="o">.</span>
+</pre></div>
+  </div>
+</div>
+
+</div><!--/.container -->
+
+    <footer class="footer">
+      <div class="container">
+        <p>Copyright &copy; 2011&ndash;2014 The Apache Software Foundation, Licensed under
+        the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.
+        </p>
+        <p>
+        Apache Jena, Jena, the Apache Jena project logo,
+        Apache and the Apache feather logos are trademarks of The Apache Software Foundation.
+        </p>
+      </div>
+  </footer>
+      
+
+</body>
+</html>