martes, 17 de diciembre de 2013

Mysql - Procedimiento "Create Database" sin ser admin.

Hace unos días se me planteo la necesidad de que usuarios no administradores pudiesen crear bbdd's en un server mysql y que además ganasen privilegios sobre las mismas.

Lo que se nos ocurrió fue lo siguiente, quizás(seguro) no sea la mejor solución pero funciona bien. Así que ahí la dejo... por si le sirve a alguien.

Para poder crear bbdd con usuarios no administradores se ha creado un "Procedimiento almacenado " en una bbdd creada específicamente para almacenar este u otros procedures.
En este caso la he llamado "gestion".

1.- Con usuario "root" creamos la bbdd donde almacenaremos el procedure.
mysql>create database gestion;

2.- Dentro de esta bbdd cargamos el procedure
mysql>use gestion;

(En la consola pegamos el procedure del final de la nota. Negrita)
     mysql> DELIMITER //
     mysql> CREATE PROCEDURE CreateAppDB(
         ->     IN db_name VARCHAR(50))
         -> BEGIN
         ->     DECLARE myvar VARCHAR(32);
         ->
         ->     -- Create database
         ->
(En la creación de la bbdd añadimos un prefijo "ext_" para tener controladas las bbdd que creen los usuarios.)
        
->     SET @s = CONCAT('CREATE DATABASE ext_', db_name);
         ->     PREPARE stmt FROM @s;
         ->     EXECUTE stmt;
         ->     DEALLOCATE PREPARE stmt;
         ->
         ->     -- Grant permissions
(Aqui obtenemos el usuario que esta lanzando el procedure sin la parte "@XXX" que completaremos con @%, esto se almacena en "myvar")         ->     SELECT LEFT(USER(), LOCATE('@',USER()) - 1) INTO myvar;
         ->     SELECT myvar;
         ->
         ->     SET @s = CONCAT('GRANT ALL ON ext_', db_name, '.* TO ', myvar, '@''%''');
         ->     PREPARE stmt FROM @s;
         ->     EXECUTE stmt;
         ->     DEALLOCATE PREPARE stmt;
         -> END//

     Query OK, 0 rows affected (0.00 sec)

     mysql> DELIMITER ;
     mysql>

3.- Al usuario que se le quiera dar la posibilidad de crear bbdd se le dará permisos de ejecución sobre la bbdd gestión y sobre el procedure.

(Nota. Si el usuario no conecta desde localhost las definiciones de usuario siguientes cambian)

mysql> grant execute on procedure gestion.CreateAppDB to 'USER'@'localhost' identified by 'XXXXXX';
Query OK, 0 rows affected (0.01 sec)
----
mysql> grant execute on gestion.* to 'USER'@'localhost' identified by 'XXXXXX';
Query OK, 0 rows affected (0.00 sec)

4.- Conectamos con este usuario y lanzamos el procedimiento.
#mysql -u USER -p gestion
mysql>call gestion.CreateAppDB('nombre_bbdd'); 

5.- Tenemos creada una bbdd "ext_nomreb_bbdd" con permisos para el usuario "USER@%"


DROP PROCEDURE IF EXISTS CreateAppDB;
DELIMITER //
CREATE PROCEDURE CreateAppDB(
    IN db_name VARCHAR(50))
BEGIN
    DECLARE myvar VARCHAR(32);

    -- Create database

    SET @s = CONCAT('CREATE DATABASE ext_', db_name);
    PREPARE stmt FROM @s;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;

    -- Grant permissions
    SELECT LEFT(USER(), LOCATE('@',USER()) - 1) INTO myvar;
    SELECT myvar;
   
    SET @s = CONCAT('GRANT ALL ON ext_', db_name, '.* TO ', myvar, '@''%''');
    PREPARE stmt FROM @s;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
END//
DELIMITER ;

La idea original sale de este post, sobre el cual se han hecho pequeñas modificaciones.

jueves, 1 de marzo de 2012

Marzo negro




Quizás pienses que esto no sirve de nada y que es absurdo, pero desde luego es bastante simple de de verificar..., simplemente hay que intentarlo y esperar a ver si hay resultados.

La verdad es que está teniendo bastante difusión en distintas plataformas, Blogs, Twitter, FaceBook, Tuenti....

Por mi parte hay esta el aviso, y si sirve de algo mejor.

martes, 25 de octubre de 2011

Creación de usuarios Linux - Python

Siguiendo con las pruebas que estoy haciendo en python, esta vez me ha dado por hacer un script para la creacion de usuarios linux.
El tema no merece más comentarios además ya es hora de dormir :), y todos los comentarios necesarios están en el propio script.
Podeis descargarlo Aqui.

martes, 13 de septiembre de 2011

Monitorización - Python. v2

Hace ya bastante tiempo, colgue un pequeño script en python para realizar una monitorizacion simple de una maquina.
No hace mucho me resulto útil tenerla, pero me interesaba tener algunas opciones más, asi que he hecho algunas modificaciones, que aunque son simples quizas a alguien le vengan bien.

1: '-h' '--help' --> Muestra los parametros permitidos
2: '-m' '--mail' --> Monitoriza el sistema y manda el resumen por correo
3: '-s' '--screen' --> Monitoriza el sistema y muestra el resumen por pantalla
3: '-x' '--mailcarta' --> Monitoriza el sistema y manda el resumen por correo solicitando los parametros de envio


Así que aquí lo cuelgo.



martes, 6 de septiembre de 2011

DHCP - Subredes de distribución - Sedes Remotas.

Hace un par de días, en el trabajo nos ha nacido la necesidad de conectar una sede remota a nuestro DHCP (El caso es sobre windows, pero el concepto es aplicable a cualquier sistema).
De esta necesidad se nos planteaban las siguientes cuestiones.......

¿Como reenviar el trafico broadcast del cliente, de un edificio a otro con redes diferentes, convirtiendolo en unicast al DHCP?

¿Como hacer que el DHCP solo asignara direcciones de su ámbito, y no de cualquiera disponible?


Bueno estas dos preguntas tenian la misma respuesta......

"ip helper-addres"


Es un comando disponible en nuestros routers cisco, para realizar el forwarding de este trafico broadcast.

Ademas este comando esta basado en el protocolo BOOTP, anterior a DHCP, que además de reenviar el tráfico, nos rellena el campo de direccion de origen, con la IP del router.

De este modo, sin variar nada en el servidor DHCP, conseguimos que en función de que red venga la peticion, se le asigne direccionamiento de un ámbito u otro.