2012-09-10 7 views
7

mysql 데이터베이스를 사용하고 있습니다. 그 안에는 tbl_user이라는 테이블이 있습니다.이 테이블을 모든 사용자에게 읽기 전용 테이블로 변경해야합니다. 어떻게 읽기 전용으로 테이블을 변경하려면?mysql에서 읽기 전용 테이블

+0

어떤 사용자가 변경하거나 편집 할 수없는 테이블이 필요한 이유는 무엇입니까? : D –

+0

@Terry Seidler 내 응용 프로그램의 로그인 자격 증명을 포함하는 테이블입니다. – Dhileepan

답변

5

REVOKE documentation 읽기, 대신 완전한 사용자 목록의 공개를 사용

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

'GRANT OPTION'에 대해 기억하십시오. ALL은'GRANT' 권한을 제거하지 않습니다. – rogal111

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

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

당신은이 테이블에/GRANT 권한을 수정/업데이트를 취소 할 필요 Documentation

3

참조 사용자에 대해 해당 테이블에서 권한을 REVOKE 명령을 사용하여 INSERT/UPDATE 취소/삭제 모든 사용자에 대해 SELECT를 추가하십시오. 사용자에 부여 옵션이있는 경우

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

readonly_table이 실행 :

REVOKE GRANT OPTION ON readonly_table FROM tbl_user; 

가 선택 모든 사용자를 부여하려면에 대한 The MySQL Access Privilege System

3

권한을 취소하는 또 다른 방법은 방아쇠를 사용하는 것입니다.

/* 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

이 하나는 괜찮아요, 고마워요 미스터 왕^- ^ –