Inicio Foros Bases de datos MySQL Asignar permisos a un usuario solo a tablas concretas en MySQL

Este debate contiene 3 respuestas, tiene 2 mensajes y lo actualizó alonsojpd alonsojpd hace 4 meses, 3 semanas.

Viendo 4 publicaciones - del 1 al 4 (de un total de 4)
  • Autor
    Publicaciones
  • #3458
    Avatar
    Varios
    Moderador

    Hola, tengo una base de datos MySQL montada en un servidor Linux CentOS 7. Tiene bastantes tablas y quiero darle a un usuario permisos de lectura (select) solo a unas tablas concretas, no a todas.

    Lo he intentado desde MySQL Workbench pero solo me deja establecer los permisos a nivel de catálogo (base de datos) y no de tabla:

    Permisos usuario en MySQL con Workbench

    ¿Es que MySQL no permite establecer permisos a un usuario por tabla?

    #3460
    alonsojpd
    alonsojpd
    Jefe de claves

    Te indicamos los pasos para crear un usuario y establecerle permisos a nivel de tabla en MySQL. Puedes hacerlo desde la línea de comandos de tu servidor Linux CentOS con MySQL:

    1. Conéctate a MySQL con el comando:

    mysql –user=»root» –password=»contraseña»

    2. Crea el usuario con el comando:

    create user ‘nombre_usuario’@’localhost’ identified by ‘contraseña’;

    3. Con esta consulta puedes comprobar que el usuario se ha creado correctamente:

    select user, host from mysql.user;

    4. Para establecer permisos para una tabla concreta, por ejemplo el permiso de solo lectura (select) e incluso desde un equipo concreto de la red (por ejemplo desde todos los que tengan IP 192.168.1.*):

    grant select on nombre_bd.nombre_tabla to ‘nombre_usuario’@’192.168.1.%’;

    Donde:

    • nombre_usuario: nombre que quieras darle al usuario con el que accederás a MySQL. Si queremos dar acceso para todos los usuarios (no es recomendable) colocaremos un *.
    • nombre_bd: nombre de la base de datos (catálogo) que contiene las tablas a las que le darás acceso. Si queremos dar acceso a todas las bases de datos (no es recomendable) colocaremos un *.
    • nombre_tabla: nombre de la tabla a la que le darás acceso. Si queremos dar acceso a todas las bases de datos (no es recomendable) colocaremos un *.
    • select: indica el tipo de permiso que le darás para la tabla, hay varias opciones y se pueden añadir juntas (separadas por comas): insert, select, update, delete, drop,… Si queremos todos los permisos (no suele ser recomendable) se pone un ALL.
    • 192.168.1.%: en este valor estableceremos desde que IP o rango de IP queremos que se acceda a MySQL con el usuario. Si queremos todos (no suele ser recomendable) se pone un %.

    Para comprobar que se han asignado correctamente los permisos puedes ejecutar este otro comando:

    show grants for ‘nombre_usuario’@’192.168.1.%’;

    Por último ejecuta esta otra consulta para hacer efectivos permisos creados:

    flush privileges;

    A partir de este momento el usuario tendrá acceso de lectura (select) para la tabla indicada en la base de datos MySQL indicada y desde el equipo o equipos indicados.

    #3461
    Avatar
    Varios
    Moderador

    Genial, lo he probado y me funciona perfecto.

    Otra cuestión ¿hay algún listado de esos permisos que se le pueden asignar select, insert, update, …?

    #3462
    alonsojpd
    alonsojpd
    Jefe de claves

    Aquí tienes un listado con su descripción (en inglés):

    • ALL [PRIVILEGES] Grant all privileges at specified access level except GRANT OPTION and PROXY.
    • ALTER Enable use of ALTER TABLE. Levels: Global, database, table.
    • ALTER ROUTINE Enable stored routines to be altered or dropped. Levels: Global, database, routine.
      CREATE Enable database and table creation. Levels: Global, database, table.
    • CREATE ROLE Enable role creation. Level: Global.
    • CREATE ROUTINE Enable stored routine creation. Levels: Global, database.
    • CREATE TABLESPACE Enable tablespaces and log file groups to be created, altered, or dropped. Level: Global.
    • CREATE TEMPORARY TABLES Enable use of CREATE TEMPORARY TABLE. Levels: Global, database.
    • CREATE USER Enable use of CREATE USER, DROP USER, RENAME USER, and REVOKE ALL PRIVILEGES. Level: Global.
    • CREATE VIEW Enable views to be created or altered. Levels: Global, database, table.
      DELETE Enable use of DELETE. Level: Global, database, table.
    • DROP Enable databases, tables, and views to be dropped. Levels: Global, database, table.
    • DROP ROLE Enable roles to be dropped. Level: Global.
    • EVENT Enable use of events for the Event Scheduler. Levels: Global, database.
    • EXECUTE Enable the user to execute stored routines. Levels: Global, database, routine.
    • FILE Enable the user to cause the server to read or write files. Level: Global.
    • GRANT OPTION Enable privileges to be granted to or removed from other accounts. Levels: Global, database, table, routine, proxy.
    • INDEX Enable indexes to be created or dropped. Levels: Global, database, table.
    • INSERT Enable use of INSERT. Levels: Global, database, table, column.
    • LOCK TABLES Enable use of LOCK TABLES on tables for which you have the SELECT privilege. Levels: Global, database.
    • PROCESS Enable the user to see all processes with SHOW PROCESSLIST. Level: Global.
    • PROXY Enable user proxying. Level: From user to user.
    • REFERENCES Enable foreign key creation. Levels: Global, database, table, column.
    • RELOAD Enable use of FLUSH operations. Level: Global.
    • REPLICATION CLIENT Enable the user to ask where master or slave servers are. Level: Global.
    • REPLICATION SLAVE Enable replication slaves to read binary log events from the master. Level: Global.
    • SELECT Enable use of SELECT. Levels: Global, database, table, column.
    • SHOW DATABASES Enable SHOW DATABASES to show all databases. Level: Global.
    • SHOW VIEW Enable use of SHOW CREATE VIEW. Levels: Global, database, table.
    • SHUTDOWN Enable use of mysqladmin shutdown. Level: Global.
    • SUPER Enable use of other administrative operations such as CHANGE MASTER TO, KILL, PURGE BINARY   LOGS, SET GLOBAL, and mysqladmin debug command. Level: Global.
    • TRIGGER Enable trigger operations. Levels: Global, database, table.
    • UPDATE Enable use of UPDATE. Levels: Global, database, table, column.
    • USAGE Synonym for “no privileges”
Viendo 4 publicaciones - del 1 al 4 (de un total de 4)

Debes estar registrado para responder a este debate.