Obtener información de una base de datos en otro servidor

We encourage users to post events happening in the community to the community events group on https://www.drupal.org.
ivanalexanderm's picture

Buenas tardes a todos, estoy intentando obtener información de una base de datos alojada en un servidor distinto a donde tengo mi sitio drupal, la idea es que cada usuario ingrese su usuario y contraseña y en un nodo por cada usuario logeado se muestre la información contenida en la base de datos del servidor externo, la verdad soy nuevo en drupal y no tengo idea de por donde empezar, había pensado en hacer views con filtros contextuales pero la verdad no estoy seguro, y pues la seguridad también es un punto importante. Gracias!!!

Comments

Algunas preguntas

koffer's picture

Hola, en realidad no es mi especialidad, pero me gustaría saber un poco más para que te puedan responder mejor, van algunas preguntas:

En que versión de drupal estas trabajando? o apenas lo vas a decidir?

Que tipo de información vas traer de otra base de datos?

Por que tiene que estar en un servidor distinto? Es de un cliente o organización externa?

Es información que va cambiando en la otra base de datos?

Que tipo de base de datos es?

preguntas

ivanalexanderm's picture

hola, 1. estoy trabajando en la versión 8.1.3 de Drupal, 2. el sitio web es de una escuela los datos que traería de la otra base son calificaciones, horarios de los profesores, información de los grupos asignados de cada profesor, 3. por ejemplo en la escuela existe un lector de datos biométricos (hand key) para registrar la entrada y salida de cada profesor, existe un servidor conectado al handkey que cada vez que un profesor registra la entrada se le muestra en un monitor que su asistencia fue registrada y si le muestran algunos avisos importantes y personalizados para cada profesor, pero solo se muestran por unos segundos, entonces la idea es utilizar el sitio web para elaborar un tipo de "oficina virtual", para que cada profesor cuente con una clave para logearse a la oficina virtual y por ejemplo poder consultar sus asitencias, sus recados del hand key, y la información de sus horarios y grupos asignados, pero digamos que en una primera etapa con que pueda ver sus recados del hand key estaría perfecto. Por lo tanto si es información que esta cambiando y la base de datos del hand key está en mysql, cualquier idea es bienvenida. Gracias!!!

Base de datos Drupal

joseft40's picture

Saludos Ivan.
Me disculpo por si no logro captar la idea.
Según entiendo se requiere capturar los datos de otra base de datos externa a Drupal 8 pero esa otra base de datos no posee la estructura de datos de drupal puesto que en esa otra base de datos se busca capturar los datos de entrada de cada profesor mediante el lector biométrico.
Estoy en lo correcto?

Hola Ivan, Creo que para

w4lt3r's picture

Hola Ivan,

Creo que para iniciar puedes realizar la conexión a la base de datos externa, para llevar a cabo dicha configuración debes modificar el archivos settings.php precisamente la línea 247 en ella puedes agregar varias configuraciones para las bases de datos que necesites, por ejemplo:

<?php
$databases
= array(
 
'default' => array(
   
'default' => array(
     
'database' => 'drupal_db',
     
'username' => 'usuario',
     
'password'  => 'pass',
     
'host' => 'localhost',
     
'port' => '',
    
'driver' => 'mysql',
    
// El prefijo lo uso para distinguir las tablas de Drupal y módulos
     // contribuidos de las nuevas tablas que yo cree si asi se requiere
    
'prefix' => 'dp_',
    ),
  ),
 
'remote_db' => array(
   
'default' => array(
     
'database' => 'my_remote_db_name',
     
'username' => 'usuario',
     
'password' => 'pass',
     
'host' => 'ip|server_name',
     
'port' => '' // 3306 por defecto si se deja vacío.
     
'driver' => 'mysql' // puede ser PostgreSQL, SQL Server, Oracle,
    
'prefix' => '',
    ),
  ),
);
?>

Arriba de la línea 247 esta la documentación de lo que describo, una vez tengas configuradas tus bases de datos puede hacer switch entre una y otra con la función db_set_active.

NOTA Despues de realizar tu consulta a la base de datos remota debes asegurarte de regresar a la base de datos de la instalción de Drupal, de no hacerlo, recibiras un error.

Ok con lo anterior ya esta resuelto tu problema de conexión a una base de datos externa, con la otra duda que planteas no me queda muy claro, pero hare la suposición de que los datos a mostrar son a corde al usuario que se le loguea (quiero decir que un usuario X no podra ver la info de un usuario Y) de ser cierta mi suposición puedes hacer uso de la función template_preprocess_node esta la pueddes implementar en el archivo template.php de tu tema (crear mi propio tema) o en el archivo mi-module.module de tu módulo personalizado te dejo el enlace para que te documentes crear mi propio módulo. Con lo anterior basicamente haces switch en tu base de datos remota, validas la información a obtener para el usuario en específico y lo guardas dentro del parámetro que recibe la función, ejemplo:

<?php
function mi_modulo_preprocess_node(&$variables) {
 
$datos = funcion_para_consultar_datos_remotos();
 
$variables['mi_variable'] = $datos;
}
?>

Una vez guardados los datos en la variable por referencia, esta la podrás usar en el archivo node.tpl, ejemplo:

<?php
// node.tpl file
<div class="datos-remotos"><?php print $mi_variable; ></div>
?>

Espero te sea de ayuda la información que te proporcione, éxitos ;).

tu suposición es correcta

ivanalexanderm's picture

Muchas gracias por tu respuesta Walter, tu suposición es correcta los datos a mostrar son individuales de cada usuario logeado, pues leyendo tu post creo que estoy muy verde en esto de Drupal jejeje...Pero me voy a poner a estudiar las funciones que me sugeriste y después les platicaré como me fue!!. En cuanto a la seguridad no hay riesgo al hacer switch de esta forma con la base de datos externa?. Gracias!!

Interesante el proyecto, lo

w4lt3r's picture

Interesante el proyecto, lo que te comente anteriormente es para Drupal 7, pero a nivel de principios no hay mucha diferencia ya que para trabajar con múltiples bases de datos en D8 también debes modificar el archivo settings.php básicamente con la misma estructura, de igual forma el archivo es rico en documentación para que no te pierdas.
Respecto a los preprocess en D8 aún existen con ciertas modificaciones pero el concepto es el mismo (defines tus variables en el backend y las usas en el frontend) solo que en D8 el motor de renderizado es Twig :P el cual me encanta por cierto :D.

Con el tema de seguridad te aconsejo lo siguiente:

  • Una vez termines de realizar las modificaciones en el archivo settings.php asegurate que tanto el archivo como la carpeta que lo contiene no tenga permisos de escritura, ya que en dicho archivo estan contenidas las credenciales de las bases de datos.
  • Si vas a persistir datos en la db remota, asegurate de filtrar siempre los datos recibidos por el usuario.
  • El core de Drupal al momento de una instalación crea archivos .htaccess que se encargan de setear algunos aspectos de seguridad y entre uno de ellos es no servir el recurso settings.php, entonces a menos que tu modifiques los .htaccess o alguien ajeno lo haga, no deberías de preocuparte.
  • Por último, te recomiendo que te suscribas al equipo de seguridad de Drupal, ya que al momento de encontrar un bug de seguridad importante lo sabras a primera mano y no cuando ya se vea comprometido tu sitio.

Spanish

Group organizers

Group events

Add to calendar

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: