2012-09-10 26 views
7

Estoy usando la base de datos mysql. En eso tengo una tabla llamada tbl_user. Necesito cambiar esta tabla como de solo lectura para cada usuario. ¿Cómo cambiar la tabla como de solo lectura?Tabla de solo lectura en mysql

+0

¿Por qué necesita una tabla que no puede ser modificada o editada por ningún usuario? : D –

+0

@Terry Seidler Es una tabla que contiene las credenciales de inicio de sesión para mi aplicación. – Dhileepan

Respuesta

5

Para conceder a todos los usuarios de selección, el uso público en lugar de una lista de usuarios completa

REVOKE ALL ON tbl_user FROM PUBLIC 
GRANT SELECT ON tbl_user TO PUBLIC 
+0

Recuerda "GRANT OPTION". TODOS no eliminan el privilegio 'GRANT'. – rogal111

2
GRANT SELECT ON tbl_user TO user; 
GRANT SELECT, INSERT, UPDATE, DELETE ON tbl_user TO user; 
3

utilizar el comando REVOKE y revocar INSERT/UPDATE/DELETE derechos de esa tabla para el usuario

REVOKE 
    priv_type [(column_list)] 
     [, priv_type [(column_list)]] ... 
    ON [object_type] priv_level 
    FROM user [, user] ... 

Consulte Documentation

3

Es necesario revocar actualización/modificar los privilegios/donación a esta tabla para todos los usuarios y agregue SELECCIONAR.

REVOKE ALL ON readonly_table FROM tbl_user ; 
GRANT SELECT ON readonly_table TO tbl_user; 

Si el usuario tiene la opción de concesión de readonly_table ejecutar este:

REVOKE GRANT OPTION ON readonly_table FROM tbl_user; 

leer sobre The MySQL Access Privilege System y REVOKE documentation

3

Además revocar el permiso, otra forma es utilizar el activador

/* triggers */ 
delimiter // 

DROP TRIGGER IF EXISTS stop_table_insert; 
CREATE TRIGGER stop_table_insert 
    BEFORE INSERT ON `table` 
FOR EACH ROW 
BEGIN 
    SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Database maintainance'; 
END;// 

DROP TRIGGER IF EXISTS stop_table_update; 
CREATE TRIGGER stop_table_update 
    BEFORE UPDATE ON `table` 
FOR EACH ROW 
BEGIN 
    SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Database maintainance'; 
END;// 

DROP TRIGGER IF EXISTS stop_table_delete; 
CREATE TRIGGER stop_table_delete 
    BEFORE DELETE ON `table` 
FOR EACH ROW 
BEGIN 
    SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Database maintainance'; 
END;// 


delimiter ; 
+0

Este está bien para mí, gracias Sr. Wang^- ^ –