• No results found

DISADVANTAGES

5.4 Data collection instruments used

5.4.1. Secondary data

Virtuoso, como se ha comentado en apartados anteriores, permite la utilización de SPARQL 1.1, el mismo que posee el lenguaje de manipulación SPARQL UPDATE (sparul), con el cual se pueden realizar operaciones de INSERCIÓN – BORRADO – MODIFICACIÓN de tripletas almacenadas en el Store.

Este tipo de operaciones son necesarias para cumplir con el objetivo de la plataforma POIS y su API CRUD. El uso de este lenguaje es realizado desde el mismo EndPoint donde se interactúa con SPARQL. De esta forma, basándose en la descripción dada de este EndPoint anteriormente, el mismo que es de acceso público, implicaría que cualquiera desde el EndPoint podrá manipular la estructura de los datos mediante la ejecución de sentencias SPARQL-UPDATE, algo que compromete seriamente la integridad de los datos y la consistencia de los mismos en el Store.

63

Cúmar Ramiro Cueva Tacuri 50 Figura 20: Usuarios Virtuoso Server

Para solventar este inconveniente Virtuoso implementa un conjunto de ROLES que son asignados a determinados usuarios, de tal forma que un usuario determinado puede poseer uno o varios roles que le permitan llevar acabo determinadas acciones sobre el Store.

Dentro del conjunto de roles preexistentes en Virtuoso es importante enfocarse en la existencia de dos roles: SPARQL_SELECT y SPARQL_UPDATE, los mismos que contienen permisos de selección y permisos de actualización (selección implícita) respectivamente.

Figura 21: Roles Virtuoso Server

Virtuoso por defecto enlaza la interfaz del EndPoint localizada en la dirección: http://servidor.com:8890/sparql.

Cúmar Ramiro Cueva Tacuri 51

bajo el rol de SPARQL_SELECT, es así que al intentar ejecutar una sentencia DELETE (o cualquiera que involucre SPARQL – UPDATE) sobre esta interfaz obtendremos un resultado similar al mostrado en la Figura 22.

Figura 22: Error de Privilegios

Donde se especifica que no existen los permisos asociados con el usuario para realizar dicha acción, lo que resulta una medida necesaria para proteger la integridad del Store dejando tan solo accesible la consulta de datos.

Aun así la necesidad de realizar manipulaciones sobre el Store es necesaria, puesto que el API de la Plataforma deberá permitir esto, y debido a que desde esta interfaz no es seguro aplicar también el rol SPARQL_UPDATE, se implementará una solución que involucra la existencia de dos interfaces de entrada hacia el Store. La ya conocida /sparql y una nueva bajo el directorio /sparql-auth.

De tal forma que existirán dos interfaces una para la extracción y otra para la manipulación de los datos del Store. Así, se creará un usuario con los permisos necesarios (rol SPARQL_UPDATE) para que trabaje sobre esta interfaz, con los siguientes datos:

User: test2

Pass: test2

La creación del usuario es realizada mediante la interfaz principal de Conductor, bajo la opció System Admin. Do de ade ás se asig a á el ol correspondiente para realizar la manipulación del Store.

Cúmar Ramiro Cueva Tacuri 52 Figura 23: Creación de Usuario

Una vez creado el usuario con los permisos adecuados (rol), se puede comprobar su funcionamiento desde la dirección:

http://servidor.com:8890/sparql-auth

La autenticación utilizada por este tipo de usuario es una Autenticación Digest64, conocida en Virtuoso como SQL Authentication. Siendo una forma útil y eficaz para garantizar el acceso. Además de este método Virtuoso presenta otras formas posibles como65:

 OAuth

 WebID Protocol based authentication

Para la utilización de estos tipos de autentificación es necesaria la instalación del módulo policy_manager_dav.vad y acceder desde la dirección:

http://servidor.com:8890/policy_manager/

Donde es posible seleccionar el método de autenticación, recordando que debe existir al menos un usuario que acepte este tipo de autenticación.

64 http://en.wikipedia.org/wiki/Digest_access_authentication 65

Cúmar Ramiro Cueva Tacuri 53 Figura 24: Servidor de Autentificación

La selección de uno u otro método dependerá directamente de la aplicabilidad que tendrá nuestro Store, en este caso, será consumido y actualizado desde otra aplicación (cliente – API) por lo que utilizar autenticación digest, se convierte en la mejor opción, por su valor de seguridad y facilidad.

3.1.3.1. Pruebas

Una vez creado el usuario con permisos de actualización sobre el Store, así como identificado el punto de acceso, la interacción con él mediante el protocolo REST es similar a las pruebas realizadas anteriormente. A continuación se muestra la inserción de un individuo del tipo ESTUDIANTE (según se define en el vocabulario POIS) desde un fichero PHP hacia el Store, en este caso se utilizará la librería CURL66.

<?php

$user = "test2"; $pass = "test2";

$query = "PREFIX pois:<http://purl.oclc.org/POIS/vcblr/#> INSERT INTO GRAPH <http://localhost:8890/POIS> { pois:estd01 rdf:type pois:ESTUDIANTE; pois:cedula 1104698723; pois:ViveEn pois:pg64 }"; $format = "application/sparql-results+json"; $endPointSecure = "http://localhost:8890/sparql-auth/"; $URL = $endPointSecure."?query=".urlencode($query)." &format=".urlencode($format); $ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $URL);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);

Cúmar Ramiro Cueva Tacuri 54

curl_setopt($ch, CURLOPT_USERPWD, "$user:$pass"); $output = curl_exec($ch);

echo $output;

curl_close($output);

La salida producida será una confirmación de inserción de la siguiente manera.

{ "head": { "link": [], "vars": ["callret-0"] }, "results": { "distinct": false, "ordered": true, "bindings": [

{ "callret-0": { "type": "literal", "value": "Insert into <http://localhost:8890/POIS>, 3 (or less) triples -- done" }} ] } }

De esta forma se ha insertado un nuevo individuo ESTUDIANTE que contiene 3 tripletas, se debe recalcar que para realizar la autenticación contra el EndPoint se especifica el tipo de autenticación a utilizar:

curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST); Esta prueba demuestra la viabilidad de utilizar una interfaz de EndPoint dedicada solo al proceso de manipulación de datos del Store y otra para la extracción de información.