practica 4 y 5

21
Maestría en Tecnologías de Información Administración de Base de Datos Cuatrimestre Mayo – Agosto 2012 Sede Pachuca Profesor: MTI. Elizabeth Cortés Palma Alumno: Rubén Vázquez Cerón Practica 4 y 5: Usuarios y Roles en MySQL Usando PHP 1. Creación y Asignación de Roles a Usuarios en MySQL. 2. Comunicación a la Base de Datos Con PHP. 3. Publicación de Formularios PHP en la Web

Upload: razr-vz

Post on 25-Jul-2015

129 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Practica 4 y 5

Maestría en Tecnologías de InformaciónAdministración de Base de DatosCuatrimestre Mayo – Agosto 2012Sede Pachuca

Profesor:

MTI. Elizabeth Cortés Palma

Alumno:

Rubén Vázquez Cerón

Practica 4 y 5:

Usuarios y Roles en MySQL Usando PHP

1. Creación y Asignación de Roles a Usuarios en MySQL.

2. Comunicación a la Base de Datos Con PHP.

3. Publicación de Formularios PHP en la Web

Page 2: Practica 4 y 5

Maestría en Tecnologías de InformaciónAdministración de Base de DatosCuatrimestre Mayo – Agosto 2012Sede Pachuca

Introducción

Objetivo

Realizar la creación de roles en MySQL, así como la asignación de dichos roles a usuarios que

acceden a la base de datos.

Generación de una conexión a la base de datos a través de PHP, así como la creación de

formulación para consulta e inserción de datos a la base de datos.

Publicación de nuestros formularios PHP en la Web, a través de un hosting (Go Daddy).

Marco Teórico

Añadir nuevas cuentas de usuario a MySQL

Puede crear cuentas MySQL de dos formas:

Usando comandos GRANT

Manipulando las tablas de permisos MySQL directamente

El método preferido es usar comandos GRANT, ya que son más concisos y menos propensos a

errores. . GRANT está disponible desde MySQL 3.22.11.

Otra opción para crear cuentas es usar uno de los diversos programas proporcionados por

terceras partes que ofrecen capacidades para administradores de MySQL. phpMyAdmin es

una de ellos.

Los siguientes ejemplos muestran cómo usar el programa cliente mysql para añadir nuevos

usuarios. Esto significa que para realizar cambios, debe conectar al servidor MySQL como el

usuario root , y la cuenta root debe tener el privilegio INSERT para la base de datos mysql y

el permiso administrativo RELOAD.

En primer lugar, use el programa mysql para conectar al servidor como el usuario root :

shell> mysql --user=root mysql

Si ha asignado una contraseña a la cuenta root, necesitará la opción --password o -p para

este comando mysql y también para los mostrados a continuación en esta sección.

Page 3: Practica 4 y 5

Maestría en Tecnologías de InformaciónAdministración de Base de DatosCuatrimestre Mayo – Agosto 2012Sede Pachuca

Tras la conexión al servidor como root, puede añadir nuevas cuentas. El siguiente comando

usa GRANT para inicializar nuevas cuentas:

mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost'

-> IDENTIFIED BY 'some_pass' WITH GRANT OPTION;

mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%'

-> IDENTIFIED BY 'some_pass' WITH GRANT OPTION;

mysql> GRANT RELOAD,PROCESS ON *.* TO 'admin'@'localhost';

mysql> GRANT USAGE ON *.* TO 'dummy'@'localhost';

Las cuentas creadas con estos comandos GRANT tienen las siguientes propiedades:

Dos de las cuentas tienen un nombre de usuario de monty y una contraseña

de some_pass. Ambas cuentas son cuentas de superusuario con plenos permisos para

hacer cualquier cosa. Una cuenta ('monty'@'localhost') puede usarse sólo cuando se

conecte desde el equipo local. La otra ('monty'@'%') puede usarse para conectarse

desde cualquier otro equipo. Note que es necesario tener ambas cuentas para

que monty sea capaz de conectarse desde cualquier sitio como monty. Sin la

cuenta localhost, la cuenta anónima para localhostcreada

por mysql_install_db tendría precedencia cuando monty conecte desde el equipo

local. Como resultado, monty se trataría como un usuario anónimo. La razón para ello es

que el usuario anónimo tiene un valor más específico en la columna Host que la

cuenta 'monty'@'%' y por lo tanto toma precedencia en la ordenación de la tabla user.

(La ordenación de la tabla user se discute en Sección   5.6.5, “Control de acceso, nivel 1:

Comprobación de la conexión”.)

Una cuenta tiene un nombre de usuario de admin y no tiene contraseña. Esta cuenta

puede usarse sólo desde el equipo local. Tiene los privilegios

administrativos RELOAD y PROCESS . Éstos permiten al usuario admin ejecutar los

comandos mysqladmin reload, mysqladmin refresh, y mysqladmin flush-xxx ,

así como mysqladmin processlist . No se dan permisos para acceder a ninguna base

de datos. Puede añadir tal privilegio posteriormente mediante un

comando GRANT adicional.

Una cuenta tiene un nombre de usuario de dummy sin contraseña. Esta cuenta puede

usarse sólo desde el equipo local. No tiene ningún privilegio. El permiso USAGE en el

comando GRANT permite crear una cuenta sin darle ningún privilegio. Tiene el efecto de

Page 4: Practica 4 y 5

Maestría en Tecnologías de InformaciónAdministración de Base de DatosCuatrimestre Mayo – Agosto 2012Sede Pachuca

inicializar todos los privilegios globales a 'N'. Se asume que se otorgarán privilegios

específicos posteriormente.

Como alternativa a GRANT, puede crear la misma cuenta directamente mediante

comandos INSERT y después diciendo al servidor que recargue las tablas de permisos

usando FLUSH PRIVILEGES:

shell> mysql --user=root mysql

mysql> INSERT INTO user

-> VALUES('localhost','monty',PASSWORD('some_pass'),

-> 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');

mysql> INSERT INTO user

-> VALUES('%','monty',PASSWORD('some_pass'),

-> 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');

mysql> INSERT INTO user SET Host='localhost',User='admin',

-> Reload_priv='Y', Process_priv='Y';

mysql> INSERT INTO user (Host,User,Password)

-> VALUES('localhost','dummy','');

mysql> FLUSH PRIVILEGES;

La razón de usar FLUSH PRIVILEGES al crear cuantas con INSERT es decir al servidor que

vuelva a leer las tablas de permisos. De otro modo, los cambios no se tienen en cuenta hasta

que se reinicie el servidor. ConGRANT, FLUSH PRIVILEGES no es necesario.

La razón para usar la función PASSWORD() con INSERT es cifrar las contraseñas. El

comando GRANT cifra la contraseña, así que PASSWORD() no es necesario.

El valor 'Y' activa permisos para las cuentas. Para la cuenta admin , puede emplear la

sintaxis más clara extendida INSERT usando SET.

En el comando INSERT para la cuenta dummy account, sólo las columnas Host, User,

y Password en el registro de la tabla user tienen valores asignados. Ninguna de las columnas

de permisos se asignan explícitamente, así que MySQL les asigna a todas el valor por defecto

de 'N'. Esto es equivalente al funcionamiento de GRANT USAGE.

Para inicializar una cuenta de super usuario, sólo es necesario crear una entrada en la

tabla user con las columnas de permisos inicializadas a 'Y'. Los privilegios de la

tabla user son globales, así que no se necesitan registros en ninguna de las otras tablas de

permisos.

Page 5: Practica 4 y 5

Maestría en Tecnologías de InformaciónAdministración de Base de DatosCuatrimestre Mayo – Agosto 2012Sede Pachuca

Los siguientes ejemplos crean tres cuentas y les dan acceso a bases de datos específicas.

Cada una de ellas tiene un nombre de usuario custom y contraseña obscure.

Para crear las cuentas con GRANT, use los siguientes comandos:

shell> mysql --user=root mysql

mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP

-> ON bankaccount.*

-> TO 'custom'@'localhost'

-> IDENTIFIED BY 'obscure';

mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP

-> ON expenses.*

-> TO 'custom'@'whitehouse.gov'

-> IDENTIFIED BY 'obscure';

mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP

-> ON customer.*

-> TO 'custom'@'server.domain'

-> IDENTIFIED BY 'obscure';

Las tres cuentas pueden usarse de la siguiente manera:

La primera cuenta puede acceder a la base de datos bankaccount, pero sólo desde el

equipo local.

La segunda cuenta puede acceder la base de datos expenses, pero sólo desde el

equipo whitehouse.gov.

La tercera cuenta puede acceder la base de datos customer, pero sólo desde el

equipo server.domain.

Para inicializar las cuentas custom sin usar GRANT, use los comandos INSERT como se

explica para modificar las tablas de permisos directamente:shell> mysql --user=root mysql

mysql> INSERT INTO user (Host,User,Password)

-> VALUES('localhost','custom',PASSWORD('obscure'));

mysql> INSERT INTO user (Host,User,Password)

-> VALUES('whitehouse.gov','custom',PASSWORD('obscure'));

mysql> INSERT INTO user (Host,User,Password)

-> VALUES('server.domain','custom',PASSWORD('obscure'));

mysql> INSERT INTO db

-> (Host,Db,User,Select_priv,Insert_priv,

-> Update_priv,Delete_priv,Create_priv,Drop_priv)

Page 6: Practica 4 y 5

Maestría en Tecnologías de InformaciónAdministración de Base de DatosCuatrimestre Mayo – Agosto 2012Sede Pachuca

-> VALUES('localhost','bankaccount','custom',

-> 'Y','Y','Y','Y','Y','Y');

mysql> INSERT INTO db

-> (Host,Db,User,Select_priv,Insert_priv,

-> Update_priv,Delete_priv,Create_priv,Drop_priv)

-> VALUES('whitehouse.gov','expenses','custom',

-> 'Y','Y','Y','Y','Y','Y');

mysql> INSERT INTO db

-> (Host,Db,User,Select_priv,Insert_priv,

-> Update_priv,Delete_priv,Create_priv,Drop_priv)

-> VALUES('server.domain','customer','custom',

-> 'Y','Y','Y','Y','Y','Y');

mysql> FLUSH PRIVILEGES;

Los primeros tres comandos INSERT añaden registros en la tabla user que permiten al

usuario custom conectar desde los equipos con la contraseña dada, pero no otorga privilegios

blobales (todos los privilegios se inicializan al valor por defecto 'N'). Los siguientes tres

comandos INSERT añaden registros en la tabla db que otorgan privilegios a custom para las

bases de datos bankaccount, expenses, y customer, pero sólo cuando se accede desde los

equipos apropiados. Como siempre, cuando modifique las tablas de permisos directamente,

debe decirle al servidor que las recargue con FLUSH PRIVILEGES para que los cambios en

los permisos tengan efecto.

Si quiere dar a un usuario específico acceso desde todas las máquinas dentro de un dominio

dado (por ejemplo,mydomain.com), puede realizar un comando GRANT que use el carácter

comodín '%' en la parte del equipo del nombre de cuenta:

mysql> GRANT ...

-> ON *.*

-> TO 'myname'@'%.mydomain.com'

-> IDENTIFIED BY 'mypass';

Para hacer lo mismo modificando las tablas de permisos directamente, haga lo siguiente:

mysql> INSERT INTO user (Host,User,Password,...)

-> VALUES('%.mydomain.com','myname',PASSWORD('mypass'),...);

mysql> FLUSH PRIVILEGES;

Page 7: Practica 4 y 5

Maestría en Tecnologías de InformaciónAdministración de Base de DatosCuatrimestre Mayo – Agosto 2012Sede Pachuca

Desarrollo

1. Creación de roles y Asignación de Usuarios en MySQL.

Como primer paso debemos crear 2 usuarios que accederán a la base de datos ENOBI, y que tendrán

diferentes privilegios, los usuarios serán admin y usuario, los cuales podrán insertar nuevos registros o solo

realizar lectura de registros existentes, para la creación de dichos usuarios utilizaremos la herramienta

MySQL Workbench.

Nos dirigiremos a Manage Security, y en la pestaña Server Access Management, en la parte de abajo

daremos click en “Add Account”.

Page 8: Practica 4 y 5

Maestría en Tecnologías de InformaciónAdministración de Base de DatosCuatrimestre Mayo – Agosto 2012Sede Pachuca

Procederemos a asignar un nombre de usuario y una contraseña que deberemos ingresar 2 veces, haremos

click en “Apply”, este procedimiento lo deberemos hacer dos veces para crear los dos usuarios que

necesitamos para la práctica.

A continuación nos dirigiremos a la pestaña “Schema Privileges” donde asignaremos a cada usuario sus

privilegios correspondientes, en dicha pestaña nos aparecerá la siguiente ventana donde seleccionaremos a

nuestro usuario “admin”, y daremos click en “Add Entry”.

Nos aparecerá la siguiente ventana donde seleccionaremos la base de datos a la que nuestro usuario podrá

acceder y daremos click en Ok.

Page 9: Practica 4 y 5

Maestría en Tecnologías de InformaciónAdministración de Base de DatosCuatrimestre Mayo – Agosto 2012Sede Pachuca

Después de haber agregado nuestra entrada, nos encontraremos nuevamente en la pestaña “Schema

Privileges”, para finalizar el proceso bastara con dar click en “Select ALL”, con esto estaremos asignándole

todo los privilegios a nuestro usuario “admin”, sobre la base de datos ENOBI. Daremos click en “Save

Changes”.

El proceso anterior deberemos repetirlo para la creación de nuestro usuario “usuario”, la única diferencia

será que a este solo le activaremos la opción “SELECT” con esto estaremos diciendo que este usuario solo

puede consultar información.

Page 10: Practica 4 y 5

Maestría en Tecnologías de InformaciónAdministración de Base de DatosCuatrimestre Mayo – Agosto 2012Sede Pachuca

2. Comunicación a la Base de Datos con PHP.

Para la comunicación a la base de datos mediante PHP, haremos uso de la herramienta Adobe

Dreamweaver. Dicha Herramienta nos facilitara la tarea de la creación de nuestros archivos PHP que

contendrán nuestros formularios de comunicación a la Base de Datos.

Una vez en Dreamweaver procederemos a crear un nuevo sitio web.

Lo primero que deberemos hacer es darle un nombre a nuestro nuevo sitio web, y darle un nombre a la

carpeta que contendrá los archivos de nuestro sitio web, dicha carpeta deberá está dentro de nuestra

carpeta www de nuestro servidor apache, después de esto iremos a la pestaña servidores.

Page 11: Practica 4 y 5

Maestría en Tecnologías de InformaciónAdministración de Base de DatosCuatrimestre Mayo – Agosto 2012Sede Pachuca

En la pestaña “Servidores” agregaremos uno dando click en el icono +, nos aparecerá una ventana donde

seleccionaremos un nombre para nuestro servidor, también en el campo “Conectar Usando”

seleccionaremos Local/Red, de la misma manera seleccionaremos la carpeta que el servidor deberá

reconocer, dicha carpeta es nuestra carpeta Test que contendrá nuestro sitio web, y finalmente

designaremos una URL, que en nuestro caso será http://localhost/Test/.

Para finalizar esta parte iremos a la pestaña Avanzados, y en el campo “Modelo de Servidor”

seleccionaremos PHP MySQL, y daremos click en “Guardar”.

Únicamente nos faltara habilitar la casilla “De Prueba” y dar click nuevamente en Guardar.

Page 12: Practica 4 y 5

Maestría en Tecnologías de InformaciónAdministración de Base de DatosCuatrimestre Mayo – Agosto 2012Sede Pachuca

Procederemos a crear un nuevo archivo PHP, en el cual generaremos nuestros formularios.

Antes de generar nuestros formularios deberemos establecer la conexión a la base de datos, esto lo

haremos en el menú Ventana y seleccionando la opción Base de Datos, al hacer lo anterior nos aparecerá un

lista donde se visualizaran todas nuestras conexiones, bastara con hacer click en el icono de +, para generar

una nueva conexión.

Page 13: Practica 4 y 5

Maestría en Tecnologías de InformaciónAdministración de Base de DatosCuatrimestre Mayo – Agosto 2012Sede Pachuca

Deberemos asignar un nombre a nuestra conexión, especificar nuestro servidor MySQL que en este caso es

localhost, y especificar el usuario y contraseña que creamos previamente, asi como el nombre de la base de

datos a la que accederemos, si elegimos una base de datos en la cual no tenemos permisos la conexión nos

marcara error. Este proceso deberemos realizarlo dos veces, una por cada uno de los usuarios que creamos.

Una vez realizado lo anterior procederemos a insertar nuestros formularios de lectura e inserción, uno de

cada uno por cada una de nuestras conexiones, en total tendremos 2 formularios para nuestra conexión

usando nuestro usuario “admin” y 2 formularios para nuestra conexión usando el usuario “usuario”.

Para realizar lo antes mencionado nos posicionaremos en nuestro archivo PHP que al momento está vacío, e

iremos al menú Insertar -> Objeto de Datos -> Juego de Registros. Nos aparecerá la siguiente ventana.

Page 14: Practica 4 y 5

Maestría en Tecnologías de InformaciónAdministración de Base de DatosCuatrimestre Mayo – Agosto 2012Sede Pachuca

Aquí seleccionaremos el conjunto de datos que deseamos usar, asignaremos un nombre que deseemos, y en

conexión seleccionaremos nuestra conexión admin, y nuestra tabla cliente, con esto bastara, solo

deberemos dar click en aceptar.

Este procedimiento deberemos realizarlo una segunda vez pero utilizando nuestra conexión usuario, con

esto habremos establecido la comunicación a la misma base de datos, a la misma tabla, pero con dos

usuarios diferentes que poseen diferentes privilegios.

Page 15: Practica 4 y 5

Maestría en Tecnologías de InformaciónAdministración de Base de DatosCuatrimestre Mayo – Agosto 2012Sede Pachuca

Para continuar iremos al menú Insertar -> Objeto de Datos -> Datos Dinámicos -> Tabla Dinámica, donde

seleccionaremos nuestro juego de registros que usan nuestra conexión a la base de datos mediante nuestro

usuario “admin”, y daremos aceptar, con esto habremos insertado una tabla donde se visualizaran todos los

registros, esta tarea deberemos hacerla una segunda vez pero usando nuestra conexión con usuario

“usuario”, en este caso ambos funcionaran debido a que ambos usuarios tienes privilegios para consultar

información.

Para finalizar la creación de nuestros formularios, deberemos insertar nuestro formulario de inserción de

datos, usando nuestras dos conexiones, para esto iremos al menú Insertar -> Objeto de Datos -> Insertar

Registro -> Asistente de Formulario de Inserción de Registros, donde seleccionaremos nuestra conexión con

usuario admin y daremos aceptar, este paso lo repetiremos para nuestro usuario “usuario”.

Finalmente deberemos guardar nuestro archivo PHP con el nombre de index.php, y procederemos a realizar

las pruebas desde nuestro navegador web.

Page 16: Practica 4 y 5

Maestría en Tecnologías de InformaciónAdministración de Base de DatosCuatrimestre Mayo – Agosto 2012Sede Pachuca

Como podemos ver la consulta de datos para ambos usuarios se muestra de manera correcta y sin

problema.

Page 17: Practica 4 y 5

Maestría en Tecnologías de InformaciónAdministración de Base de DatosCuatrimestre Mayo – Agosto 2012Sede Pachuca

Finalmente probaremos la inserción de datos en donde, si intentamos ingresar un nuevo registro con

nuestro usuario “usuario” nos deberá mostrar el siguiente error debido a que no posee los privilegios para

realizar inserciones.

3. Publicación de Formularios PHP en la Web.

En esta sección se proveen las URL en las cuales podrá comprobarse la funcionalidad del ejercicio

desarrollado.

Para el usuario “Admin” que posee todos los privilegios:

http://mtipachuca.com.previewdns.com/index_admin.php

Para el usuario “Usuario” que posee solo privilegios de lectura:

http://mtipachuca.com.previewdns.com/index.php

Page 18: Practica 4 y 5

Maestría en Tecnologías de InformaciónAdministración de Base de DatosCuatrimestre Mayo – Agosto 2012Sede Pachuca

ConclusiónEl uso de roles nos permite la gestión de grupos de usuarios asignando o revocando privilegios a un grupo

entero con una sola acción, esto significa que la administración de la seguridad en la base de datos se

simplifica y agiliza, permitiéndonos tener un mejor control sobre nuestra base de datos así como una mejor

seguridad debido a que a cada usuario individual se le asignan privilegios de acuerdo a su perfil de usuario

dentro de nuestro sistema.

El uso de herramientas como MySQL Workbench y Dreamweaver facilita enormemente la gestión de la

seguridad así como la conexión a nuestra base de datos, dándonos herramientas y asistentes que nos llevan

de la mano y nos permiten de manera muy rápida entablar una comunicación con la base de datos y de la

misma forma empezar a manipular los datos de nuestra base de datos.

Consultas Electrónicas

http://dev.mysql.com/doc/refman/5.0/es/user-account-management.html