viernes, 12 de agosto de 2011

MySQL GRANT SELECT a una DB Especifica con un Usuario Especifico

Creo una base de datos llamada dbmorsa:
mysql> create database dbmorsa;



Creo un usuario nuevo morsa, si ya existe este comando cambia el password, con este comando también habilitamos privilegios en todas las DB existentes:
mysql> GRANT ALL PRIVILEGES ON *.* TO 'morsa'@'localhost' IDENTIFIED BY 'my_pass';



Vemos el usuario creado
mysql> use mysql;


mysql> select user from user where user='morsa';

+-------+
| user |
+-------+
| morsa |
+-------+
1 row in set (0.00 sec)



Vemos privilegios con el usuario morsa logueado:
mysql> mysql –u root –p

Password: my_pass
mysql> show grants;

+-----------------------------------------------------------------------------------------------------------------------+
| Grants for morsa@localhost |
+-----------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'morsa'@'localhost' IDENTIFIED BY PASSWORD '*6AA8F77DAD1D9BA03C9535B32B0281A1B70B6B90' |
+-----------------------------------------------------------------------------------------------------------------------+



Cambio a la DB dbmorsa
mysql> use dbmorsa



Creo dos tablas en la DB dbmorsa:
mysql> CREATE TABLE tabla1(codigo int, nombre varchar(10));
mysql> CREATE TABLE tabla2(valor int, nombreInt varchar(10));



Veo las tablas creadas:
mysql> show tables;

+-------------------+
| Tables_in_dbmorsa |
+-------------------+
| tabla1 |
| tabla2 |
+-------------------+
2 rows in set (0.00 sec)



Vemos que aun estan vacias:
mysql> select * from tabla1;

Empty set (0.00 sec)

mysql> select * from tabla2;
Empty set (0.00 sec)


Inserto datos en las tablas creadas previamente:
mysql> INSERT INTO tabla1 VALUES(1,'Beto');
mysql> INSERT INTO tabla1 VALUES(2,'Teto');
mysql> INSERT INTO tabla1 VALUES(3,'Peto');

mysql> INSERT INTO tabla2 VALUES(1,'Marta');
mysql> INSERT INTO tabla2 VALUES(2,'Parta');
mysql> INSERT INTO tabla2 VALUES(3,'Larta');


Consultamos los datos recientemente creados en ambas tablas:
mysql> select * from tabla1;

+--------+--------+
| codigo | nombre |
+--------+--------+
| 1 | Beto |
| 2 | Teto |
| 3 | Peto |
+--------+--------+
3 rows in set (0.00 sec
)

mysql> select * from tabla2;
+-------+-----------+
| valor | nombreInt |
+-------+-----------+
| 1 | Marta |
| 2 | Parta |
| 3 | Larta |
+-------+-----------+
3 rows in set (0.00 sec)



Eliminamos usuario morsa:
mysql>DELETE FROM `mysql`.`user` WHERE `user`.`Host` = 'localhost' AND `user`.`User` = 'morsa';
mysql> FLUSH PRIVILEGES;



Ahora creamos nuevamente el usuario morsa y solo damos permisos a dicho usuario para realizar un SELECT en ls base dbmorsa y la tabla2:
root@Pruebas:~# mysql -u root –p
mysql> GRANT SELECT ON dbmorsa.tabla2 TO 'morsa'@'localhost' IDENTIFIED BY 'MORSA';
mysql> exit
root@Pruebas:~# mysql -u morsa -p



Vemos que solo esta visible la DB dbmorsa y la tabla2 correspondiente:
mysql> show databases;

+--------------------+
| Database |
+--------------------+
| dbmorsa |
+--------------------+
2 rows in set (0.00 sec)


mysql> use dbmorsa;

Database changed

mysql> show tables;

+-------------------+
| Tables_in_dbmorsa |
+-------------------+
| tabla2 |
+-------------------+
1 row in set (0.00 sec)



Corroboramos también que podemos hacer un select:
mysql> select * from tabla2;

+-------+-----------+
| valor | nombreInt |
+-------+-----------+
| 1 | Marta |
| 2 | Parta |
| 3 | Larta |
+-------+-----------+
3 rows in set (0.00 sec)

No hay comentarios: