Ver Mensaje Individual
  #4 (permalink)  
Antiguo 25/03/2012, 15:52
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: dar permisos GRANT

Cita:
yo con ese manual no me entero, no lo veo claro, ya he echo pruebas y nada, si no me quieres dar el codigo lo entiendo, pero algún otro ejemplo explicado.
Perdona, pero no se entiende el problema que puedes tener para leer un manual... Puede que sea falta de práctica, pero ten en cuenta que los manuales no te dan las cosas servidas. Tienes que poder leer correctamente.
Mira, el esquema que te propone el manual, sacando lo que no vas a usar, es este:
Código MySQL:
Ver original
  1. GRANT priv_type [(column_list)] [, priv_type [(column_list)]] ...
  2.     ON [object_type] {tbl_name | * | *.* | db_name.*}
  3.     TO user [IDENTIFIED BY [PASSWORD] 'password']
  4.         [, user [IDENTIFIED BY [PASSWORD] 'password']] ...
  5.     [WITH with_option [with_option] ...]
  6.  
  7. object_type =
  8.     TABLE
  9.  
  10. with_option =
  11.   | MAX_QUERIES_PER_HOUR count
  12.   | MAX_UPDATES_PER_HOUR count
  13.   | MAX_CONNECTIONS_PER_HOUR count
  14.   | MAX_USER_CONNECTIONS count
Si buscas un poco más adelante, verás que cuando se habla de priv_type se está hablando de privileges types o tipos de privilegios, que se refiere a cada uno de los tipos de privilegios listados en esa misma lista.
Sin miras Con cuidado, verás que esta expresión se lista muestra dos veces en esa línea:
Cita:
GRANT priv_type [(column_list)] [, priv_type [(column_list)]
, la segunda vez entre corchetes y separada por una coma. Esto significa que cada vez que quieres incluir un privilegio, este se lista por denominación, separad por una coma del anterior.
¿Qué facil de entender, no te parece?

Junto a esta expresión encontrarás que entre corchetes, aparece la palabra column_list.
Por un lado, deberías saber que en un ejemplo cualquiera, de cualquier manual, los corchetes se usan para indicar algo opcional, algo que puede estar o no incluido, si y sólo si es necesario.
Eso significa que eso que va entre paréntesis puede no ser necesario, pero si se necesita, va allí y entre paréntesis.
¿Qué significa column_list? Bueno, si te tomas la molestia de buscar un poco más abajo en el manual, descubrirás que se usan para listar las columnas que un usuario puede seleccionar, actualizar o insertar en las tablas que puede acceder.

Luego de listar todos los privilegios que se desean poner (y como está indicado en el manual, usando comas para la llista), se debe poner ON e indicar qué tipo de objeto está afectado:
Cita:
object_type =
TABLE
| FUNCTION
| PROCEDURE
Pueden ser todos (*), una o más tablas, o una o más bases, o ciertas tablas de ciertas bases, tal y como se puede entender perfectamente porque el conjunto está entre llaves.
Supongo que ya sabrás que las llaves se usan para indicar que algo puede ser interativo, es decir, indicar que son, en este caso, uno o más object_type, listados separados por comas... ¿No es así?

Luego de eso, se indica a quien:
Cita:
TO user [IDENTIFIED BY [PASSWORD] 'password']
[, user [IDENTIFIED BY [PASSWORD] 'password']] ...
Como puedes ver, se puede indicar aquí mas de un usuario, y a cada usuario, con qué clave entra.

Finalmente se puede poner ciertas restricciones de cuenta:
Cita:
[WITH with_option [with_option] ...]

...

with_option =
GRANT OPTION
| MAX_QUERIES_PER_HOUR count
| MAX_UPDATES_PER_HOUR count
| MAX_CONNECTIONS_PER_HOUR count
| MAX_USER_CONNECTIONS count
Se usa para otorgar ciertos privilegios especiales, y restringir las consultas que se pueden hacer...

Todo esto está en el manual, ahora, toma tu sentencia y mira:
Código MySQL:
Ver original
  1.     SELECT ON empresa.clients empresa.proveidors,
  2.     INSERT ON empresa.clients empresa.departaments,
  3.     DELETE ON empresa.departaments,
  4.     CREATE TABLE,
  5.     CREATE
  6. TO 'responsable'@'localhost'
  7.     IDENTIFIED BY 'P@ssw0rd';
¿Notas dónde está mal escrita?
¿No?

Bueno, es fácil: Usas 3 ON, cuando debería haber uno sólo, y pones cada tabla luego del privilegio, cuando deberían estar listados los privilegios, y listadas las tablas con el ON.
Por otro lado, tienes tres grupos distintos de privilegios que no se aplican al mismo conjunto de tablas. Lo que te conviene es hacer un GRANT para cada privilegio, a menos que quieras hacer una sentencia muy complicada.
Como los privilegios se otorgan en forma acumulativa, y sólo se eliminan con REVOKE, no causará problemas:
Código MySQL:
Ver original
  1. TO 'responsable'@'localhost';
  2.  
  3. GRANT SELECT  ON empresa.clients empresa.proveidors
  4. TO 'responsable'@'localhost';
  5.  
  6. GRANT INSERT ON empresa.clients empresa.departaments
  7. TO 'responsable'@'localhost' ;
  8.  
  9.     DELETE ON empresa.departaments
  10. TO 'responsable'@'localhost'
  11.     IDENTIFIED BY 'P@ssw0rd';
Mas o menos así...

Le estoy poniendo el cambio de password al final solamente, porque no necesitamos que se cambie cada vez que un GRANT se ejecuta.

Como verás, interpretar un manual, no es tan complicado. Simplemente tienes que conocer la sintaxis usada para los ejemplos, y buscar las explicaciones del ejemplo dentro del texto...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)