Archivos de Categoría: Base de datos - Paginas 3

Restringir el acceso a phpMyAdmin

Es importante restringir lo máximo posible el acceso al panel de phpMyAdmin, para eso lo mejor es limitar el acceso a una IP concreta, así aunque tengan los datos de acceso no podrán hacer nada. Para ello existen dos formas:

Mediante el fichero .htaccess situado en el directorio /usr/share/phpmyadmin/ , ponemos las siguientes directrices:
deny from all
allow from 127.0.0.1
allow from XXX.XXX.XXX.XXX #la IP desde la que se tendrá acceso

Luego editamos el fichero /etc/phpmyadmin/apache.conf para indicar la ruta del .htaccess que acabamos de editar, añadiendo las líneas:
Directory /usr/share/phpmyadmin
AllowOverride All
/Directory

Y después reiniciar el servicio de apache para que surja efecto la configuración.

La segunda opción me parece más sencilla y es modificando el fichero de configuración del propio phpMyAdmin, situado en /etc/phpmyadmin/config.inc.php, en el encontraremos un if como este:

if (!empty($dbname)) {

al final de dicho if y antes del i++ que lo finaliza, añadimos el siguiente código:

$cfg['Servers'][$i]['AllowDeny']['order'] = 'deny,allow';
$cfg['Servers'][$i]['AllowDeny']['rules'] = array(
    'deny % from all', 
    'allow % from 127.0.0.1', 
    'allow % from ::1',
    'allow root from localhost',
    'allow root from 127.0.0.1',
    'allow root from ::1',
    'allow root from XXX.XXX.XXX.XXX'  // la IP desde la que se tendrá acceso
    );

Y ya está, sin necesidad de reiniciar el servicio.

Calcular número de coincidencias en una cadena de texto

Montando un buscador, me han pedido que ordene los resultados por el número de coincidencias dentro del texto, esto se puede hacer con MATCH AGAINST pero implica que la búsqueda se centraría en un campo de texto que tenga un índice FULLTEXT, el problema es que en mi caso es una vista y tiene que buscar en una concatenación de campos por lo que queda descartada esta opción.

La solución la he hecho con una función para contabilizar el número de ocurrencias dentro de la cadena.

DELIMITER $$
CREATE FUNCTION `num_coincidencias`(
        texto  text ,
        palabra  varchar(100)
    )
    RETURNS int
    NOT DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN    
	return ROUND ((LENGTH(texto) - LENGTH( REPLACE ( lower(texto), lower(palabra), ""))) / LENGTH(palabra));
END;
$$
DELIMITER ;


-- y asi podríamos usarlo
select num_coincidencias('bla bla bla saf gsdafg sdfg bla', 'bla') as numero_blas

Ejecutar scripts grandes

Normalmente cuando ejecutamos un script SQL lo podemos hacer directamente abriéndolo con el Manager Studio pero cuando el fichero es grande (en mi caso eran más de 7 gigas), va a ser que no puede con ello así que toca buscar alternativas.
Hay herramientas de terceros que en teoría permiten su ejecución pero lo más sencillo es hacerlo desde una consola de MS-DOS:

sqlcmd -S SERVIDOR -i C:\script.sql

Y por supuesto, si hay que editar un fichero de ese tamaño, lo mejor es usar el Ultraedit