| Regresar | Temario | Ing. Angel Castro (UNAM - DGSCA Centro Coapa) |
Trabajando con Bases de Datos
Restringiendo el acceso
MySQL es un manejador de base de datos (o gestor de base de datos) con licencia GPL, es decir es software libre, es poderoso, rapido y muy eficiente. Si el programa se utiliza bajo Windows hay que hacer una donacion de acuerdo a la licencia de MySQL, si requiere mas informacion visite la pagina de mysql www.mysql.org
Antes de iniciar a utilizar MySQL hay que ejecutarlo, en unix hay que correr el demonio, con el phptriad solo hay que ir al menu Programs -> pohptriad -> Start MySQL. Luego vamos a utilizar una ventada de MS-DOS para utilizarlo. En el caso de quere instalarlo sobre Windows 2000/NT tendremos que configurar MySQL como servicio ya que phptriad no funciona sobre este "Sistema Operativo".
Por default MySQL permite conexiones anonimas directas de la maquina localhost (127.0.0.1) por seguridad vamos a eliminar este usuario anonimo para aumentar la seguridad. No olvide que los comandos en MySQL monitor terminan con ';' (punto y coma).
Para comenzar vamos a asignarle un password de root a MySQL
C:\apache\mysql\bin>mysqladmin -u root password angel
C:\apache\mysql\bin>mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2 to server version: 3.23.32-debug\
Type 'help;' or '\h' for help. Type '\c' to clear the buffer
mysql>
el -u es para indicarle el usuario y la sintaxis para ponerle un password es
mysqladmin -u usuario password <el_password_que_quieras>
Despues ejecutamos mysql para ingresar a el monitor de MySQL
Existen por default 2 bases de datos una llamada test y otra mysql, mysql es la que contiene informacion de permisos y bases de datos existentes, por lo que vamos a utilizar SQL para borrar los usuarios de tabla user que no tengan asignado ningun password, de la siguiente forma
mysql> use mysql
Database changed
mysql> show tables;
+-----------------+
| Tables_in_mysql |
+-----------------+
| columns_priv |
| db |
| host |
| tables_priv |
| user |
+-----------------+
5 rows in set (0.06 sec)
mysql> select user,password from user;
+------+------------------+
| user | password |
+------+------------------+
| root | 07a4b1453a806bb3 |
| | |
| | |
| root | |
+------+------------------+
4 rows in set (0.11 sec)
Y entonces ahora si borramos los 3 usuarios que no tienen password asignado.
mysql> delete from user where password='';
Query OK, 3 rows affected (0.06 sec)
Por ultimo vemos con SQL cuantos usuarios quedaron
mysql> select user,password from user;
+------+------------------+
| user | password |
+------+------------------+
| root | 07a4b1453a806bb3 |
+------+------------------+
1 row in set (0.06 sec)
Con esto hemos asegurado nuestra base de datos. Falta un paso final que es recargar MySQL para que los cambios (de usuarios) surtan efecto, esto no quiere decir que cada que ingresemos un query vamos a recargar MySQL, pero si cada que hagamos cambios en los usuarios directamente afectando las tablas de la base de datos mysql.
mysql> \q
Bye
C:\apache\mysql\bin>mysqladmin -u root -p reload
Enter password: *****
C:\apache\mysql\bin>
Ahora para poder ingresar a MySQL debemos especificar el usuario y el password con el que vamos a ingresar.
C:\apache\mysql\bin>mysql
ERROR 1045: Access denied for user: 'ODBC@localhost' (Using password: NO)
C:\apache\mysql\bin>mysql -u root -p
Enter password: *****
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6 to server version: 3.23.32-debug
Type 'help;' or '\h' for help. Type '\c' to clear the buffer
mysql>
Ahora si intentamos escribir solo mysql no nos permitira ingresar. el -u es para especificarle el usuario y el -p es para que pregunte el password (el password no se escribe hasta que lo pida)
Todo esto se tiene que hacer en la linea de comandos!!, no tiene nada que ver con PHP (hasta el momento).
Mostrar la base de datos en la linea de comandos.
Para mostrar el esqueleto de la base de datos utilizamos SHOW, de la siguiete forma
Como ejercicio puede utilizar estos comandos para saber cuantas tablas tiene la base de datos mysql, y que contiene cada tabla.
Creacion de usuarios.
Para la creacion de usuarios utilizamos GRANT, ya que no existe un comando especifico como en PostgreSQL para crear usuarios, esta es la sintaxis:
GRANT <privilegios> ON <nombre_de_la_base.nombre_de_la_tabla> TO <usuario> IDENTIFIED BY <password>
<privilegios> - Los privilegios son los permisos que el usuario que estamos creando va teer, se resumen en los siguientes: alter (cambiar tablas e indices), create (crear base de datos y tablas), delete (borrar datos de las tablas), drop (borrar base de datos o tablas), select (hacer queries), update (actualizar datos en la tabla), insert (agregar datos e tablas), all (todos los permisos).
<nombre_de_la_base.nombre_de_la_tabla> - En MySQL puedes especificar que usuario tiene que permiso a que base de datos y que tabla, normalmente se especifica *.* que indica que el usuario x tiene permiso a todas las bases de datos y a todas las tablas, si se quisiera especificar una sola base de datos llamada 'prueba' seria de la siguiente forma prueba.*
<usuario> - Nombre del usuario, adicionalmente se puede indicar aqui desde donde se puede conectar este usuario, por ej. pancho@localhost, es decir que pancho se puede conectar solo desde la maquina local, podemos usar % como comodin ej. peter@%dominio.com, es decir que peter se puede conectar solo desde dominio.com o cualquier subdominio. Si se utiliza solo el usuario estamos indicandole que solo se puede conectar desde localhost.
<password> - Un password normalmente va encerrado e comillas
Ejemplo. Vamos a crear un usuario llamado pancho que tenga acceso solo a la base de datos musica y que solo pueda actualizar, agregar y realizar queries.
GRANT select, update,insert ON musica.* to pancho@localhost IDENTIFIED BY "redrose";
Dentro de mysql monitor escribimos lo siguiente
mysql> create database mydb;
Query OK, 1 row affected (0.06 sec)
mysql>
En este ejemplo mydb es el nombre de la base de datos que vamos a crear.
Ahora utilizando Dezign for Database, generamos el script que va contener la estructura en SQL para crear las tablas, indices y referencias de nuestra base de datos (previamente ahi que crearla en Dezign, el uso es muy sencillo).
y para ingresarla una vez generada es sencillo, a continuacion describo un ejemplo de como se haria. Previamente necesitamos de tener el archivo que tiene la estructura (mydb.sql) y estar en la ruta donde esta mysql monitor (c:\apache\mysql\bin)
C:\apache\mysql\bin>mysql -u root -p mydb < mydb.sql
Password:******
C:\apache\mysql\bin>
Lixto!!!, ya tenemos la estructura dentro, ahora solo falta usar show para ver si la creo si ningun problema, ya estamos listos para usar la base de datos con PHP.