Go to:
Gentoo Home
Documentation
Forums
Lists
Bugs
Planet
Store
Wiki
Get Gentoo!
Gentoo's Bugzilla – Attachment 75885 Details for
Bug 117292
[es] Upgrade mysql-howto.xml
Home
|
New
–
[Ex]
|
Browse
|
Search
|
Privacy Policy
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
Full version
mysql-howto.xml (text/xml), 34.08 KB, created by
Rodrigo Lazo
on 2005-12-31 10:19:30 UTC
(
hide
)
Description:
Full version
Filename:
MIME Type:
Creator:
Rodrigo Lazo
Created:
2005-12-31 10:19:30 UTC
Size:
34.08 KB
patch
obsolete
><?xml version="1.0" encoding="UTF-8"?> ><!DOCTYPE guide SYSTEM "/dtd/guide.dtd"> ><!-- $Header: /var/www/www.gentoo.org/raw_cvs/gentoo/xml/htdocs/doc/es/mysql-howto.xml,v 1.1 2005/10/11 14:47:30 yoswink Exp $ --> > ><guide link="/doc/es/mysql-howto.xml" lang="es"> ><title>GuÃa de iniciación MySQL</title> > ><author title="Author"> > <mail link="chriswhite@gentoo.org">Chris White</mail> ></author> ><author title="Editor"> > <mail link="fox2mike@gentoo.org">Shyam Mani</mail> ></author> ><author title="Editor"> > <mail link="neysx@gentoo.org">Xavier Neys</mail> ></author> ><author title="Traductor"> > <mail link="rlazo.paz@gmail.com">Rodrigo Lazo Paz</mail> ></author> > ><abstract> >Este documento ayuda a los usuarios a configurar y utilizar MySQL. ></abstract> > ><!-- The content of this document is licensed under the CC-BY-SA license --> ><!-- See http://creativecommons.org/licenses/by-sa/2.5 --> ><license/> > ><version>1.3</version> ><date>2005-12-15</date> > ><chapter> ><title>Empezando con MySQL</title> ><section> ><title>Contexto</title> ><body> > ><p> >MySQL es un servidor de base de datos popular que tiene distintas >aplicaciones. SQL son las iniciales de Lenguaje de Consulta >Estructurado (en inglés, (S)tandard (Q)uery (L)anguage), que es el >lenguaje que utiliza MySQL para comunicarse con otros programas. Sobre >ello, MySQL tiene sus propias funciones SQL extendidas que le añaden >funcionalidad. En este documento veremos como realizar una instalación >inicial, configurar la base de datos y las tablas, y como crear nuevos >usuarios. Empecemos con la instalación. ></p> > ></body> ></section> ><section> ><title>Instalación de MySQL</title> ><body> > ><p> >Primero asegúrate de tener instalado MySQL en tu sistema. En caso de >que necesites alguna funcionalidad especÃfica de MySQL, por favor >revisa si tienes los parámetros USE adecuados ya que estos ayudarán a >ajustar la instalación a tus necesidades. ></p> > ><pre caption="Instalando MySQL"> ><comment>(Revisa las banderas USE disponibles)</comment> ># <i>emerge --pretend --verbose mysql</i> ><comment>(Instala MySQL)</comment> ># <i>emerge mysql</i> ></pre> > ><p> >Una vez completada la instalación, verás la siguiente nota: ></p> > ><pre caption="Mensaje de información MySQL"> >You might want to run: >"emerge --config =dev-db/mysql-[version]" >if this is a new install. ></pre> > ><p> >Dado que esta es una nueva instalación, ejecuta el >comando. Necesitarás presionar <c>ENTER</c> cuando se te solicite >mientras se configura la base de datos MySQL. La configuración define >la base de datos MySQL principal que contiene información >administrativa como las bases de datos, tablas, usuarios, permisos y >demás. La configuración recomienda que modifiques tu contraseña de >super usuario lo antes posible. Definitivamente haremos eso, ya que de >otra manera alguien más podrÃa tener la oportunidad de hacerlo y >hackear nuestra configuración por defecto del servidor MySQL. ></p> > ><pre caption="Configuración MySQL"> ># <i>ebuild /var/db/pkg/dev-db/mysql-[version]/mysql-[version].ebuild config</i> > * MySQL DATADIR is /var/lib/mysql > * Press ENTER to create the mysql database and set proper > * permissions on it, or Control-C to abort now... > > Preparing db table > Preparing host table > Preparing user table > Preparing func table > Preparing tables_priv table > Preparing columns_priv table > Installing all prepared tables > > To start mysqld at boot time you have to copy support-files/mysql.server > to the right place for your system > > PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER ! > To do so, issue the following commands to start the server > and change the applicable passwords: ><comment>(Anota las siguientes 3 lineas)</comment> > /etc/init.d/mysql start > /usr/bin/mysqladmin -u root -h pegasos password 'new-password' > /usr/bin/mysqladmin -u root password 'new-password' > Depending on your configuration, a -p option may be needed > in the last command. See the manual for more details. > ><comment>(Alguna información MySQL no especÃfica del ebuild ha sido >eliminada de aquà para mantener este documento tan conciso como sea >posible)</comment> > > * For security reasons you should set your MySQL root > * password as soon as possible. ></pre> > ><impo> >A partir de mysql-4.0.24-r2, las contraseñas son introducidas en la fase >de configuración haciendo que introducir la contraseña de super usuario >sea más seguro. ></impo> > ><p> >El guión de configuración ya ha impreso los comandos que necesitamos >para definir nuestra contraseña de super usuario, asà que ahora >debemos ejecutarlos. ></p> > ><pre caption="Definiendo la contraseña de administrador (super usuario) MySQL"> ># <i>/etc/init.d/mysql start</i> * Re-caching dependency info (mtimes > differ)... * Starting mysqld (/etc/mysql/my.cnf) ... [ ok ] ><comment>(Reemplaza new-password con la nueva contraseña)</comment> ># <i>/usr/bin/mysqladmin -u root -h localhost password 'new-password'</i> ></pre> > ><p> >Ahora puedes probar si la contraseña de administrador ha sido >correctamente configurada al intentar ingresar al servidor MySQL: ></p> > ><pre caption="Ingresando al servidor MySQL utilizando mysql"> >$ <i>mysql -u root -h localhost -p</i> >Enter password: >Welcome to the MySQL monitor. Commands end with ; or \g. >Your MySQL connection id is 4 to server version: 4.0.25 > >Type 'help;' or '\h' for help. Type '\c' to clear the buffer. > >mysql> ></pre> > ><p> >La opción <c>-u</c> define qué usuario está tratando de conectarse. La >opción <c>-h</c> define a que máquina estás tratando de >conectarte. Normalmente utilizarás <c>localhost</c> a menos que estés >configurando un servidor remoto. Finalmente, <c>-p</c> indica al >cliente mysql que vas a utilizar una contraseña para ingresar al >sistema. FÃjate en el cursor <c>mysql></c>. Aquà es donde >escribirás tus comandos. Dado que hemos ingresado como super usuario, >podemos empezar a configurar nuestra base de datos. ></p> > ></body> ></section> ></chapter> > ><chapter> ><title>Configurando la base de datos</title> ><section> ><title>Creando una base de datos</title> ><body> > ><p> >Hemos ingresado al sistema y tenemos el cursor mysql en >pantalla. Primero, démosle una mirada a las bases de datos que tenemos >actualmente. Para hacer eso, utilizamos el comando <c>SHOW >DATABASES</c>. ></p> > ><pre caption="Mostrando las bases de datos MySQL"> >mysql> <i>SHOW DATABASES;</i> >+----------+ >| Database | >+----------+ >| mysql | >| test | >+----------+ >2 rows in set (0.09 sec) ></pre> > ><impo> >Por favor recuerda que los comando MySQL deben terminar con un punto y >coma -- <c>;</c> ></impo> > ><p> >Aunque ya existe una base de datos de prueba (test), vamos a crear la >nuestra. Las bases de son creadas utilizando el comando <c>CREATE >DATABASE</c>. Crearemos una llamada "gentoo". ></p> > ><pre caption="Creando la base de datos gentoo"> >mysql> <i>CREATE DATABASE gentoo;</i> >Query OK, 1 row affected (0.08 sec) ></pre> > ><p> >La salida nos permite ver que el comando ha sido ejecutado sin ningún >error. En este caso, 1 fila ha sido modificada. Esto es una referencia >a la base de datos principal de mysql, que contiene una lista de todas >las bases de datos. No necesitarás preocuparte mucho acerca de los >detalles técnicos. El último número se refiere a qué tan rápido se ha >ejecutado la consulta. Podemos verificar que nuestra base de datos ha >sido creada utilizando nuevamente el comando <c>SHOW DATABASES</c>. ></p> > ><pre caption="Verificando si se creó la base de datos"> >mysql> <i>SHOW DATABASES;</i> >+----------+ >| Database | >+----------+ >| gentoo | >| mysql | >| test | >+----------+ >3 rows in set (0.00 sec) ></pre> > ><p> >Como podemos ver, nuestra base de datos ha sido creada. Para poder >trabajar con ella creando nuevas tablas, necesitamos seleccionarla >como nuestra base de datos actual. Esto lo podemos conseguir >utilizando el comando <c>USE</c>. El comando <c>USE</c> recibe como >argumento el nombre de la base de datos que quiere convertir en >actual. Otra opción es definirla en la linea de comandos justo luego >de la opción <c>-D</c>. Continuemos y cambiémonos a la base de datos >gentoo. ></p> > ><pre caption="Cambiando a nuestra base de datos"> >mysql> <i>USE gentoo;</i> >Database changed ></pre> > ><p> >Y la base de datos actual es nuestra, previamente creada, base de >datos gentoo. Ahora que la estamos utilizando, podemos empezar a crear >algunas tablas y poner información en ellas. ></p> > ></body> ></section> ></chapter> > ><chapter> ><title>Trabajando con tablas en MySQL</title> ><section> ><title>Creando una tabla</title> ><body> > ><p> >En la estructura de MySQL, hay bases de datos, tablas, registros y >campos. Las bases de datos reunen tablas, las tablas agrupan >registros, estos a su vez almacenan campos, que son los encargados de >conservar la información real. Esta estructura permite a los usuarios >seleccionar cómo quieren acceder a su información. Hasta el momento >hemos trabajado con bases de datos, ahora enfoquémonos en las >tablas. Antes de nada, las tablas pueden ser mostradas de la misma >manera que las bases de datos utilizando el comando <c>SHOW >TABLES</c>. En este preciso momento no existen tablas en nuestra base >de datos gentoo, como nos lo mostrará la salida del comando: ></p> > ><pre caption="Base de datos gentoo vacia"> >mysql> <i>SHOW TABLES;</i> >Empty set (0.00 sec) ></pre> > ><p> >Esto significa que tenemos que crear algunas tablas. Para poder hacer >esto, utilizamos el comando <c>CREATE TABLE</c>. Sin embargo, este >comando es un poco distinto del simple <c>CREATE DATABASE</c>. Este >comando recibe una lista de parámetros. La forma es la siguiente: ></p> > ><pre caption="Sintaxis de CREATE TABLE"> >CREATE TABLE [nombre_de_la_tabla] ([nombre_del_campo] [tipo_del_campo]([tamaño])); ></pre> > ><p> ><b>nombre_de_la_tabla</b> es el nombre de la tabla que deseas >crear. En este caso crearemos una tabla >llamada <c>developers</c>. Esta tabla contendrá el nombre del >desarrollador, correo electrónico y trabajo. <b>nombre_del_campo</b> >contendrá el nombre del campo. En este caso tenemos 3 requerimientos: >nombre, correo electrónico y trabajo. El <b>tipo_del_campo</b> >especifica que clase de información vas a almacenar ahÃ. Los distintos >formatos disponibles puedes encontrarlos en >la <uri >link="http://dev.mysql.com/doc/mysql/en/column-types.html">Página de >los tipos MySQL para las columnas</uri>. En nuestro caso, utilizaremos >el tipo de dato <c>VARCHAR</c> para todos nuestros >campos. <c>VARCHAR</c> es uno de los tipos de datos más simples que >existen para trabajar con cadenas. <b>tamaño</b> es cuanto de >información tendrá almacenada cada campo. Utilizaremos 128, lo cual >significa que el campo puede tener información <c>VARCHAR</c> de 128 >bytes de longitud. Puedes pensar por ahora tranquilamente que son 128 >caracteres, sin embargo hay una explicación un poco más técnica que el >anterior sitio te dará. Ahora que sabemos como vamos a crear la tabla, >hagámoslo. ></p> > ><pre caption="Creando nuestra tabla"> >mysql> <i>CREATE TABLE developers ( name VARCHAR(128), email >VARCHAR(128), job VARCHAR(128));</i> >Query OK, 0 rows affected(0.11 sec) ></pre> > ><p> >Parece que nuestra tabla ha sido creada sin problemas. Revisémoslo con >el comando <c>SHOW TABLES</c>: ></p> > ><pre caption="Verificando nuestra tabla"> >mysql> <i>SHOW TABLES;</i> >+------------------+ >| Tables_in_gentoo | >+------------------+ >| developers | >+------------------+ >1 row in set (0.00 sec) ></pre> > ><p> >SÃ, esa es nuestra tabla. Sin embargo, parece no tener ninguna >información sobre los tipos de campos que hemos configurado. Para >ello, utilizamos el comando <c>DESCRIBE</c> (o si prefieres comandos >más cortos <c>DESC</c>), que toma como argumento el nombre de la >tabla. Veamos que información nos da de la tabla developers. ></p> > ><pre caption="Describiendo nuestra tabla"> >mysql> <i>DESCRIBE developers;</i> >+-------+--------------+------+-----+---------+-------+ >| Field | Type | Null | Key | Default | Extra | >+-------+--------------+------+-----+---------+-------+ >| name | varchar(128) | YES | | NULL | | >| email | varchar(128) | YES | | NULL | | >| job | varchar(128) | YES | | NULL | | >+-------+--------------+------+-----+---------+-------+ >3 rows in set (0.00 sec) ></pre> > ><p> >Esta salida muestra los distintos campos y sus tipos. También muestra >algunos atributos extras que están más allá del ámbito de esta >guÃa. Siéntete libre de consultar >el <uri link="http://dev.mysql.com/doc/mysql/en/">Manual de Referencia >MySQL</uri> para mayor información. Ahora tenemos una tabla con la >cual trabajar. Sigamos adelante y problémosla. ></p> > ></body> ></section> ><section> ><title>Poblando nuestra base de datos MySQL</title> ><body> > ><p> >Se puebla una tabla (o se añade información) a través del >comando <c>INSERT</c>. Al igual que el comando <c>CREATE TABLE</c>, >posee un formato especÃfico: ></p> > ><pre caption="Sintaxis de INSERT"> >INSERT INTO tabla (col1, col2, ...) VALUES('valor1', 'valor2', ...); ></pre> > ><p> >Este comando se utiliza para ingresar un registro dentro de la >tabla. tabla contiene el nombre de la tabla MySQL a la cual le >queremos ingresar la información. El nombre de la tabla puede ser >seguido por la lista de columnas a las cuales se les insertarán los >datos y <c>VALUES()</c> contiene los valores que deseas insertar en la >tabla. Puedes omitir la lista de columnas si insertas un valor en cada >una y si los pones en el mismo orden en el cual las columnas han sido >definidas. En este caso, queremos insertar información dentro de la >tabla developers. Insertemos algunos registros de ejemplo: ></p> > ><pre caption="Insertando información en nuestra tabla desarrolladores"> >mysql> <i>INSERT INTO developers VALUES('Joe Smith', 'joesmith@gentoo.org', 'toolchain');</i> >Query OK, 1 row affected (0.06 sec) ><comment>(Si no conoces el orden de las columnas o si deseas ingresar un registro incompleto)</comment> >mysql> <i>INSERT INTO developers (job, name) VALUES('outsourced', 'Jane Doe');</i> >Query OK, 1 row affected (0.01 sec) ></pre> > ><p> >De acuerdo con el resultado, parece que el registro ha sido insertado >correctamente. ¿Qué sucede si deseamos ingresar más de un solo >registro?. Ahà es donde el comando <c>LOAD DATA</c> entra en >acción. Este carga los registros desde un archivo separado. Probémoslo >con un archivo en nuestro directorio raÃz que contenga >registros. Llamaremos a este archivo <path>records.txt</path>. Veamos >un ejemplo: ></p> > ><pre caption="~/records.txt"> >John Doe johndoe@gentoo.org portage >Chris White chriswhite@gentoo.org documentation >Sam Smith samsmith@gentoo.org amd64 ></pre> > ><impo> >Debes estar seguro de la información que maneja el archivo. ¡Es muy >peligroso utilizar <c>LOAD DATA</c> cuando no se está seguro del >contenido del mismo! ></impo> > ><p> >Ahora, el comando <c>LOAD DATA</c> tiene una ligeramente larga >definición, pero utilizaremos su forma más simple. ></p> > ><pre caption="Sintaxis de LOAD DATA"> >LOAD DATA LOCAL INFILE '/ruta/al/archivo' INTO TABLE tabla; ></pre> > ><p> ><path>/ruta/al/archivo</path> es el directorio y nombre del archivo >que se utilizará. tabla es el nombre de nuestra tabla. En este caso el >archivo es ><path>~/records.txt</path> y la tabla es developers. ></p> > ><pre caption="Cargando nuestros datos"> >mysql> <i>LOAD DATA LOCAL INFILE '~/records.txt' INTO TABLE developers;</i> >Query OK, 3 rows affected (0.00 sec) >Records: 3 Deleted: 0 Skipped: 0 Warnings: 0 ></pre> > ><impo> >Si ocurre algún comportamiento extraño, asegúrate que tus campos están >separado por tabulaciones. Si pegaste la información desde otra >fuente, puede que se hayan convertido tus tabs en espacios. ></impo> > ><p> >Eso funcionó bien. Sin embargo, esto simplemente inserta registros, no >te da ningún tipo de control sobre MySQL. Muchas aplicaciones web >utilizan guiones sql para poder configurar rápida y fácilmente >MySQL. Si quieres utilizar un guión sql, tendrás que ejecutar mysql en >modo por lotes, o cargando un archivo fuente. Aquà hay un ejemplo de >mysql en modo por lotes: ></p> > ><pre caption="MySQL en modo por lotes"> >$ <i>mysql -u root -h localhost -p < sqlfile</i> ></pre> > ><p> >Al igual que en <c>LOAD DATA</c> debes estar seguro de lo que dice el >archivo <path>sqlfile</path>. <e>Si fallas en asegurarte de ello tu >base de datos puede ser comprometida</e> Otra forma en la que puedes >lograrlo es utilizando el comando <c>source</c>. Este comando >ejecutará los comandos mysql desde un archivo sql mientras se está en >el modo interactivo. Aquà tenemos un ejemplo: ></p> > ><pre caption="Utilizando source para cargar un archivo sql"> >mysql> <i>source sqlfile;</i> ></pre> > ><p> >Si ves alguna aplicación web que te pide ejecutar un archivo sql, los >dos comandos anteriores pueden ser utilizados para completar esta >tarea. Tenemos nuestra tabla configurada, entonces ¿cómo vemos >nuestros campos? Esto lo hacemos buscando en nuestra tabla utilizando >consultas. ></p> > ></body> ></section> ><section> ><title>Explorando las tablas MySQL mediante consultas</title> ><body> > ><p> >Las consultas son una de las más importantes caracterÃsticas de >cualquier base de datos SQL. Nos ayudan a convertir los datos de >nuestras tablas en información útil. La mayorÃa de las consultas se >hacen a través del comando <c>SELECT</c>. El comando <c>SELECT</c> es >muy complejo, pero nosotros vamos a trabajar en este documento con >tres formas principales. ></p> > ><pre caption="Formas de SELECT"> ><comment>(Seleccionar todas las entradas de una tabla)</comment> >SELECT * FROM tabla; ><comment>(Seleccionar una entrada especÃfica en una tabla)</comment> >SELECT * FROM tabla WHERE campo=valor; ><comment>(Seleccionar campos especÃficos)</comment> >SELECT campo1,campo2,campo3 FROM tabla [WHERE campo=valor]; ></pre> > ><p> >Démosle una rápida mirada a la primera forma. Es relativamente simple >y te da una mirada general de tu tabla. Bueno, sigamos adelante y >revisemos que datos tenemos hasta ahora. ></p> > ><pre caption="Contenido de nuestra tabla"> >mysql> <i>SELECT * FROM developers;</i> >+-------------+-----------------------+----------------+ >| name | email | job | >+-------------+-----------------------+----------------+ >| Joe Smith | joesmith@gentoo.org | toolchain | >| John Doe | johndoe@gentoo.org | portage | >| Chris White | chriswhite@gentoo.org | documentation | >| Sam Smith | samsmith@gentoo.org | amd64 | >| Jane Doe | NULL | Outsourced job | >+-------------+-----------------------+----------------+ >5 rows in set (0.00 sec) ></pre> > ><p> >Podemos ver los datos que ingresamos mediante <c>INSERT</c> y los que >insertamos utilizando <c>LOAD DATA</c>. Ahora, digamos que sólo >queremos ver el registro de Chris White. Podemos hacerlo con la >segunda forma tal y como se muestra a continuación. ></p> > ><pre caption="Seleccionado un registro especÃfico usando SELECT"> >mysql> <i>SELECT * FROM developers WHERE name = 'Chris White';</i> >+-------------+-----------------------+---------------+ >| name | email | job | >+-------------+-----------------------+---------------+ >| Chris White | chriswhite@gentoo.org | documentation | >+-------------+-----------------------+---------------+ >1 row in set (0.08 sec) ></pre> > ><p> >Como esperábamos, la entrada especÃfica que estábamos buscando ha sido >seleccionada. Ahora, digamos que sólo queremos saber el trabajo y >dirección de correo electrónico de la persona pero no su nombre. Eso >lo conseguimos con la tercera forma de <c>SELECT</c> como vemos a >continuación. ></p> > ><pre caption="Seleccionar un registro y campos especÃficos utilizando SELECT"> >mysql> <i>SELECT email,job FROM developers WHERE name = 'Chris White';</i> >+-----------------------+---------------+ >| email | job | >+-----------------------+---------------+ >| chriswhite@gentoo.org | documentation | >+-----------------------+---------------+ >1 row in set (0.04 sec) ></pre> > ><p> >Este método de selección es mucho más fácil de manejar, especialmente >con cantidades mayores de información, como veremos más >adelante. Ahora, estando conectado a la base de datos como el super >usuario, tenemos permisos ilimitados para hacer cualquier cosa en la >base de datos MySQL. En un ambiente de servidor, un usuario con tales >privilegios puede ser muy problemático. Para poder controlar quién >puede hacer qué en la base de datos, definimos privilegios. ></p> > ></body> ></section> ></chapter> > ><chapter> ><title>Privilegios en MySQL</title> ><section> ><title>Definiendo privilegios con GRANT</title> ><body> > ><p> >Los privilegios son qué tipo de acceso tienen los usuarios a las bases >de datos, tablas y esencialmente a todo. En este preciso momento en la >base de datos gentoo, la cuenta de super usuario MySQL es la única que >puede acceder a ella, dados sus permisos. Ahora, creemos dos usuarios >bastante genéricos, guest y admin, quienes accederán a la base de >datos gentoo y trabajarán con la información en ella. La cuenta guest >será restringida. Todo lo que será capaz de hacer es realizar >consultas para obtener información de la base de datos, y eso es >todo. admin tendrá el mismo control que el super usuario pero sólo >para la base de datos gentoo (no la base de datos mysql >principal). Antes de que empecemos, veamos una forma bastante >simplificada del comando <c>GRANT</c>. ></p> > ><pre caption="Sintaxis de GRANT"> >GRANT [privilegios] ON database.* TO '[user]'@'[host]' IDENTIFIED BY '[password]'; ></pre> > ><note> ><c>GRANT</c> es considerada la manera de crear usuarios. Versiones >posteriores de MySQL, sin embargo, contienen una >función <c>CREATE_USER</c>, sin embargo aún es preferible >utilizar <c>GRANT</c>. ></note> > ><p> >Primero tenemos los privilegios que deseamos asignar. Con lo que hemos >aprendido hasta ahora, aquà están algunos de los privilegios que >puedes asignar: ></p> > ><ul> > <li><c>ALL</c> - Da el privilegio de control total para la base de datos</li> > <li><c>CREATE</c> - Permite a los usuarios crear tablas</li> > <li><c>SELECT</c> - Permite a los usuarios realizar consultas</li> > <li><c>INSERT</c> - Permite a los usuarios insertar datos en una > tabla</li> > <li><c>SHOW DATABASES</c> - Permite a los usuarios listar las bases de datos</li> > <li><c>USAGE</c> - El usuario no tiene privilegios</li> > <li><c>GRANT OPTION</c> - Permite a los usuarios dar privilegios</li> ></ul> > ><note> >Si estás ejecutando MySQL para comunicar data a una aplicación web, >los privilegios de <c>CREATE</c>, ><c>SELECT</c>, <c>INSERT</c> (discutido aquÃ), <c>DELETE</c> >y <c>UPDATE</c> (para mayor información puedes buscar en >el <uri link="http://dev.mysql.com/doc/mysql/en/grant.html"> Manual de >Referencia MySQL - Sintaxis de GRANT y REVOKE</uri>) son probablemente >los únicos que necesitarás. Mucha gente comete el error de entregar >todos los permisos cuando en realidad no es necesario. Revisa con los >desarrolladores de las aplicaciones para ver si dichos permisos >causarán problemas con la operación general. ></note> > ><p> >Para nuestro usuario admin, utilizaremos ALL. Para el usuario >guest, <c>SELECT</c> será suficiente para un acceso de sólo >lectura. database es la base de datos en la cual deseamos el usuario >tenga los permisos. En este ejemplo, gentoo es nuestra base de >datos. El .* representa a todas las tablas. Si deseas, puedes >modificar el acceso por tabla. user es el nombre del usuario y host es >el nombre de la máquina desde la cual el usuario accederá. En la >mayorÃa de los casos, esta será localhost. Finalmente, password es la >contraseña del usuario. Dada esta información, crearemos nuestros >usuarios. ></p> > ><pre caption="Creando los usuarios admin y guest"> ><comment>(admin)</comment> >mysql> <i>GRANT ALL ON gentoo.* TO 'admin'@'localhost' IDENTIFIED BY 'password';</i> ><comment>(guest)</comment> >mysql> <i>GRANT SELECT ON gentoo.* TO 'guest'@'localhost' IDENTIFIED BY 'password';</i> ></pre> > ><p> >Ahora que hemos definido los usuarios, probémoslos. Primero salimos de >mysql ejecutando el comando <c>quit</c> en el cursor: ></p> > ><pre caption="Saliendo de MySQL"> >mysql> <i>quit</i> ></pre> > ><p> >Ahora hemos regresado a la consola. Dado que ya tenemos configurados >los usuarios, continuemos y veamos que pueden hacer. ></p> > ></body> ></section> ><section> ><title>Probando los permisos de los usuarios</title> ><body> > ><p> >Ahora debemos intentar ingresar con nuestro usuario >guest. Actualmente, el usuario guest solamente tiene los >privilegios <c>SELECT</c>. Esto básicamente significa que es capaz de >buscar y nada más. Ingresemos con la cuenta guest. ></p> > ><pre caption="Ingresando con la cuenta guest"> >$ <i>mysql -u guest -h localhost -p</i> >Enter password: >Welcome to the MySQL monitor. Commands end with ; or \g. >Your MySQL connection id is 6 to server version: 4.0.25 > >Type 'help;' or '\h' for help. Type '\c' to clear the buffer. > >mysql> ></pre> > ><p> >Ahora debemos probar las restricción(es) del usuario. Entremos a la >base de datos gentoo: ></p> > ><pre caption="Switching to the gentoo database"> >mysql> <i>USE gentoo;</i> >Reading table information for completion of table and column names >You can turn off this feature to get a quicker startup with -A > >Database changed ></pre> > ><p> >Ahora intentemos hacer algo que se supone no debemos >hacer. Intentaremos crear una tabla ></p> > ><pre caption="Intentando crear una tabla con el usuario guest"> >mysql> <i>CREATE TABLE test (test VARCHAR(20), foobar VARCHAR(2));</i> >ERROR 1044: Access denied for user: 'guest@localhost' to database 'gentoo' ></pre> > ><p> >Como puedes ver, esta función falló, dado que nuestro usuario no tiene >los accesos necesarios. Sin embargo, un acceso que sà posee es el >de <c>SELECT</c>. Probémoslo: ></p> > ><pre caption="Intentando ejecutar el comando SELECT"> >mysql> <i>SELECT * FROM developers;</i> >+-------------+-----------------------+----------------+ >| name | email | job | >+-------------+-----------------------+----------------+ >| Joe Smith | joesmith@gentoo.org | toolchain | >| John Doe | johndoe@gentoo.org | portage | >| Chris White | chriswhite@gentoo.org | documentation | >| Sam Smith | samsmith@gentoo.org | amd64 | >| Jane Doe | NULL | Outsourced job | >+-------------+-----------------------+----------------+ >5 rows in set (0.00 sec) ></pre> > ><p> >El comando tuvo éxito, y con ello tenemos una vista parcial de lo que >se puede hacer con los permisos de los usuarios. Nosotros también, sin >embargo, hemos creado una cuenta admin. Esta se creó con la intención >de mostrar que incluso los usuarios con todos los permisos pueden >tener limitaciones. Probemos esta cuenta ingresando como admin. ></p> > ><pre caption="Conectándose como admin"> >mysql> <i>quit</i> >Bye >$ <i>mysql -u admin -h localhost -p</i> >Enter password: >Welcome to the MySQL monitor. Commands end with ; or \g. >Your MySQL connection id is 7 to server version: 4.0.25 > >Type 'help;' or '\h' for help. Type '\c' to clear the buffer. > >mysql> ></pre> > ><p> >Para comenzar, intentaremos crear una nueva base de datos con nuestro >usuario admin. Este usuario admin tendrá accesos similares a la cuenta >super usuario de MySQL, y será capaz de realizar cualquier tipo de >modificación que desee sobre la base de datos gentoo. A continuación >probaremos el acceso del usuario a la base de datos principal de >MySQL. Recuerda que anteriormente sólo definimos permisos para una >base de datos especÃfica. ></p> > ><pre caption="Intentado crear una nueva base de datos"> >mysql> <i>CREATE DATABASE gentoo2;</i> >ERROR 1044: Access denied for user: 'admin@localhost' to database 'gentoo2' ></pre> > ><p> >En efecto, el usuario admin no puede crear bases de datos en la base >de datos MySQL principal, sin importar todos los permisos que tiene en >la base de datos gentoo. Sin embargo, nosotros seguimos siendo capaces >de modificar la base de datos gentoo a través de la cuenta admin, como >se muestra en el siguiente ejemplo de inserción. ></p> > ><pre caption="Permisos de admin para la base de datos gentoo"> >mysql> <i>USE gentoo;</i> >Reading table information for completion of table and column names >You can turn off this feature to get a quicker startup with -A > >Database changed >mysql> <i>INSERT INTO developers VALUES('Bob Simmons', 'bobsimmons@gentoo.org', 'python');</i> >Query OK, 1 row affected (0.08 sec) ></pre> > ><p> >El usuario admin puede acceder a la base de datos como desee. Algunas >veces se necesita retirar algunos permisos de los usuarios. Esto puede >suceder debido a casos que van desde un usuario problemático hasta un >empleado retirado. Veamos como desactivar permisos de usuarios con el >comando <c>REVOKE</c>. ></p> > ></body> ></section> ><section> ><title>Retirando permisos de usuarios con el comando REVOKE</title> ><body> > ><p> >El comando <c>REVOKE</c> nos permite denegar accesos a los >usuarios. Se puede negar completamente el acceso, o alguno >especÃfico. De hecho, su formato es muy similar a <c>GRANT</c>. ></p> > ><pre caption="Sintaxis REVOKE"> >REVOKE [privileges] ON database.* FROM '[user]'@'[host]'; ></pre> > ><p> >Las opciones de aquà están explicadas en la sección del >comando <c>GRANT</c>. En esta sección sin embargo, vamos a denegar >completamente el acceso a un usuario. Digamos que hemos encontrado que >la cuenta guest está causando algunos problemas de seguridad. Hemos >decidido revocarle todos los permisos, asà que ingresamos como super >usuario y hacemos lo necesario. ></p> > ><pre caption="Revocando permisos de los usuarios"> >mysql> <i>REVOKE ALL ON gentoo.* FROM 'guest'@'localhost';</i> >Query OK, 0 rows affected (0.00 sec) ></pre> > ><note> >En este caso, el acceso del usuario es simple, asà que revocar sus >permisos por cada base de datos no es un problema. Sin embargo, en >casos más extensos, es probable que prefieras utilizar *.* en vez de >gentoo.* para poder eliminar el acceso del usuario a todas las bases de >datos. ></note> > ><p> >Ahora salgamos he intentemos ingresar como el usuario guest. ></p> > ><pre caption="Intentando ingresar como el usuario guest"> >$ <i>mysql -u guest -h localhost -p</i> >Enter password: >Welcome to the MySQL monitor. Commands end with ; or \g. >Your MySQL connection id is 9 to server version: 4.0.24-debug > >Type 'help;' or '\h' for help. Type '\c' to clear the buffer. > >mysql> ></pre> > ><p> >Aunque hemos sido capaces de ingresar, nuestro acceso a gentoo ya no >existe. ></p> > ><pre caption="Acceso denegado a la cuenta guest"> >mysql> <i>USE gentoo;</i> >ERROR 1044: Access denied for user: 'guest@localhost' to database 'gentoo' ></pre> > ><p> >Y con esto nuestro usuario problemático ya no es capaz de acceder a la >base de datos gentoo. Por favor fÃjate que el usuario todavÃa es capaz >de ingresar al sistema. Esto es porque todavÃa está registrado en la >base de datos principal de MySQL. Veamos como eliminar completamente >una cuenta con <c>DELETE</c> y la tabla de usuarios de MySQL. ></p> > ></body> ></section> ><section> ><title>Eliminando cuentas con DELETE</title> ><body> > ><p> >La tabla de usuarios de MySQL contiene a todos los usuarios e >información sobre ellos. Asegúrate de ingresar como super usuario, >luego utiliza la base de datos principal de MySQL. ></p> > ><pre caption="Utilizando la base de datos mysql principal"> >mysql> <i>USE mysql;</i> >Reading table information for completion of table and column names >You can turn off this feature to get a quicker startup with -A > >Database changed >mysql> ></pre> > ><p> >Ahora veamos qué tablas contiene la base de datos mysql: ></p> > ><pre caption="listado de las tablas de la base de datos mysql"> >mysql> <i>SHOW TABLES;</i> >+-----------------+ >| Tables_in_mysql | >+-----------------+ >| columns_priv | >| db | >| func | >| host | >| tables_priv | >| user | >+-----------------+ >6 rows in set (0.00 sec) ></pre> > ><p> >La tabla user es la que estamos buscando. Sin embargo, la tabla >usuario contiene 30 campos distintos, haciéndola muy difÃcil de >leer. Para poder hacer las cosas más simples, vamos a utilizar la >tercera versión del comando <c>SELECT</c>. Los campos que necesitamos >son Host y User. ></p> > ><pre caption="Encontrado nuestro usuario guest en la tabla user"> >mysql> <i>SELECT Host,User FROM user WHERE User = 'guest';</i> >+-----------+-------+ >| Host | User | >+-----------+-------+ >| localhost | guest | >+-----------+-------+ >1 row in set (0.00 sec) ></pre> > ><p> >Ahora que tenemos nuestra información, podemos deshacernos de nuestra >cuenta guest. Esto lo conseguimos con el comando <c>DELETE</c> y la >sintaxis que mostramos a continuación. ></p> > ><pre caption="Sintaxis DELETE"> >DELETE FROM table WHERE field='value'; ></pre> > ><p> >Como podrás ver, <c>DELETE</c> es algo similar al >comando <c>SELECT</c> en cuanto al formato. En este caso, el field >(campo) será User, y el valor será guest. Esto eliminará el registro >del usuario guest de la tabla user, con lo que lograremos eliminar >exitosamente la cuenta de usuario guest. Ahora, hagámoslo: ></p> > ><pre caption="Eliminando la cuenta guest"> >mysql> <i>DELETE FROM user WHERE User='guest';</i> >Query OK, 1 row affected (0.07 sec) ><comment>(se necesita FLUSH PRIVILEGES para actualizar los permisos del usuario)</comment> >mysql> <i>FLUSH PRIVILEGES;</i> >Query OK, 0 rows affected (0.00 sec) ></pre> > ><p> >Parece haber funcionado sin problemas. Probémoslo saliendo y tratando >de ingresar de nuevo con nuestra cuenta de usuario guest. ></p> > ><pre caption="Intentado ingresar como el usuario guest"> >mysql> <i>quit</i> >Bye >$ <i>mysql -u guest -h localhost -p</i> >Enter password: >ERROR 1045: Access denied for user: 'guest@localhost' (Using password: YES) ></pre> > ><p> >¡Nuestro usuario ha sido exitosamente eliminado! ></p> > ></body> ></section> ><section> ><title>Conclusión</title> ><body> > ><p> >Mientras esta guÃa se centra principalmente en configurar MySQL en la >lÃnea de comandos, existes algunas alternativas con la forma GUI: ></p> > ><ul> > <li> > <uri link="http://www.phpmyadmin.net/home_page/">phpMyAdmin</uri> > - Popular herramienta administrativa de Mysql basada en php > </li> > <li> > <uri > link="http://sourceforge.net/projects/mysqlnavigator/">mysqlnavigator</uri> > - Interfaz en QT de MySQL. > </li> > <li> > <uri link="http://gmyclient.sourceforge.net/">gmyclient</uri> - Un > cliente MySQL basado en GNOME. > </li> > <li><uri link="http://www.knoda.org/">knoda</uri> - Un cliente MySQL > KDE.</li> ></ul> > ><p> >Esto da por concluido el tutorial introductorio de MySQL. Espero que >te haya dado un mejor entendimiento de los aspectos básicos detrás de >MySQL y como levantar una base de datos. Por favor, envÃame un correo >electrónico a <mail>chriswhite@gentoo.org</mail> si tienes algún >comentario. ></p> > ></body> ></section> ></chapter> ></guide>
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 117292
: 75885