Permisos en base de datos

Iniciado por dimitrix, 15 Septiembre 2014, 16:31 PM

0 Miembros y 1 Visitante están viendo este tema.

dimitrix

Os comento, tengo un servidor sin panel administrador así que lo hago todo a comandos.

Tengo varias bases de datos y me conecto a las bases de datos con root, se, para matarme, pero en este caso no es nada importante.

El problema es que cuando creo un nuevo usuario, aunque no tenga SUPER ni GRANT, este nuevo usuario puede ver todas las bases de datos del sistema y no quiero que las vea  :-[

Tengo phpmyadmin pero prefiero aprender a comandos... pongo captura:



Creo que el problema está que las bases de datos están en modo "mirarme todos como la meneo", entonces mi duda es ¿Cómo cambiarlo con consola? y ¿Cómo crear una nueva base de datos que sólo vea el nuevo usuario y no otros usuarios similares?

Gracias!




Pablo Videla

#1
http://dev.mysql.com/doc/refman/5.5/en/privilege-system.html


http://dev.mysql.com/doc/refman/5.5/en/show-grants.html

A leer.

Tengo entendido de que todo lo que muestras en pantalla son tipos de privilegios, no hay usuarios grant, hay usuarios con privilegios GRANT. Si no quieres que vean tus base de datos debes desactivar la casilla SHOW DATABASES.

Pero para asegurarte mejor lee la documentación con calma.

MinusFour

Citar" The SHOW DATABASES privilege enables the account to see database names by issuing the SHOW DATABASE statement. Accounts that do not have this privilege see only databases for which they have some privileges, and cannot use the statement at all if the server was started with the --skip-show-database option. Note that any global privilege is a privilege for the database."

No se si funcione esto porque nunca lo he probado, pero si quieres algo localizado podrias intentar con:

Código (sql) [Seleccionar]

REVOKE SHOW DATABASES ON *.* FROM 'usuario' @ 'localhost';

dimitrix

Mi duda es... si deja de ver las bases dedatos, no tendría pemisos? Creo que sí...

Me he leido todo, lo he probado y nop...




MinusFour

Pues tras probar mucho, me encontre con que:

Código (sql) [Seleccionar]

SHOW DATABASES;


Siempre regresa las bases de datos en las que tienes alguna clase de privilegios. Los privilegios que muestras son globales así que cualquier privilegio que agregues de esa lista hara que el usuario pueda ver todas las bases de datos.

Es mejor si agregas solo los privilegios necesarios para la base de datos en especifico, si es que no requieres permisos globales.

Por ejemplo para otorgar select en una base de datos:

Código (sql) [Seleccionar]

GRANT SELECT ON `basededatos`.* TO 'usuario'@'host';


(Me parece que TO usuario tambien funciona si no necesitas especificar el host.)

Hara que basededatos aparezca en SHOW DATABASES.

Para dar todos los permisos en una base de datos:

Código (SQL) [Seleccionar]

GRANT ALL PRIVILEGES ON `basededatos`.* TO 'usuario'@'host';


Mas información en cuanto a syntaxis:

http://dev.mysql.com/doc/refman/5.1/en/grant.html

dimitrix

#5
GENIAL MinusFour ¡Funciona!

Lo único que para dar todos los permisos lo hago con:

Código (sql) [Seleccionar]
GRANT ALL ON basededatos.* TO 'usuario'@'localhost';

Ya que si pongo las comillas en basededatos no me funciona.

En fin, te debo una, cualquier cosa me dices :-)




MinusFour

Cita de: dimitrix en 16 Septiembre 2014, 02:18 AM
GENIAL MinusFour ¡Funciona!

Lo único que para dar todos los permisos lo hago con:

Código (sql) [Seleccionar]
GRANT ALL ON basededatos.* TO 'usuario'@'localhost';

Ya que si pongo las comillas en basededatos no me funciona.

En fin, te debo una, cualquier cosa me dices :-)

No son comillas, son backticks:

`

Citar
An identifier may be quoted or unquoted. If an identifier contains special characters or is a reserved word, you must quote it whenever you refer to it.

The identifier quote character is the backtick ("`"):

http://dev.mysql.com/doc/refman/4.1/en/identifiers.html

dimitrix

Eso explica muchas cosas xDDDDD

Los he usado muchas veces en queries, pero en la consola me parece todo los mismos  :xD

Gracias de nuevo ^^