선생님을 위한 프로그래밍 수업

사용자 관리

토픽 선생님을 위한 프로그래밍 수업 > 웹 애플리케이션 만들기 > MySQL

권한이란?

사용자에 따라서 접근할 수 있는 데이터와 사용할 수 있는 기능을 제한

GRANT

사용자를 생성하고, 권한을 부여함

문법

GRANT 권한 ON 데이터베이스.테이블 TO '아이디'@'호스트' IDENTIFIED BY '비밀번호'

사용자의 제한

데이터베이스 서버에 접속하는 사용자를 제한한다.

아이디@호스트 중에서 호스트는 접속자가 사용하는 머신의 IP를 의미한다. IP를 특정하지 않으려면 '%'를 사용

  • egoing@123.100.100.100 : IP 123.100.100.100인 머신에서 접속한 ID egoing
  • egoing@% : IP 관계없이 ID가 egoing인 사용자

대상의 제한

사용자가 제어할 대상이 되는 데이터베이스, 테이블을 지정

*를 사용하면 모든 데이터베이스, 테이블을 제어 대상으로 함

권한(기능)의 제한

사용할 수 있는 권한을 제한 (권한은 아래 표 참조)

권한 템플릿

개발자 DELETE, INSERT, SELECT, UPDATE
설계자 ALTER, CREATE, DELETE, DROP, INDEX, INSERT, SELECT, UPDATE, DELETE, INSERT, SELECT, UPDATE
DBA ALL

예제

ID가 dev, 비밀번호가 1234인 사용자가 class 데이터베이스만 접근하게 하려면 아래와 같이 한다.

GRANT DELETE,INSERT,SELECT,UPDATE ON class.* TO `dev`@`%` IDENTIFIED BY '1234';

ID가 archi, 비밀번호가 1234이고 클라이언트의 IP가 100.100.100.100인 사용자가 모든 데이터베이스에 접근하면서 설계자의 권한 템플릿을 이용할 때

GRANT ALTER, CREATE, DELETE, DROP, INDEX, INSERT, SELECT, UPDATE, DELETE, INSERT, SELECT, UPDATE ON *.* TO `archi`@`100.100.100.100` IDENTIFIED BY '1234';

SHOW GRANTS

자신의 권한이나, 특정 사용자의 권한을 열람

문법

SHOW GRANTS [FOR 사용자]

예제

SHOW GRANTS FOR dev;

REVOKE

사용자의 권한을 제거

문법

REVOKE 권한 ON 데이터베이스.테이블 FROM 사용자

예제

사용자 dev의 데이터베이스 class의 DELETE 권한을 제거

revoke DELETE on class.* from dev;

DROP USER

사용자를 삭제

문법

DROP USER user [, user] ...

예제

DROP USER `dev`@`%`;

권한 테이블

Privilege 권한이 적용되는 대상(context) 설명
CREATE databases, tables, or indexes 데이터베이스, 테이블 생성
DROP databases, tables, or views 데이터베이스,테이블 삭제
GRANT OPTION databases, tables, or stored routines 사용자들의 권한을 부여하거나 제거
LOCK TABLES databases 테이블 잠그기
ALTER tables 테이블의 구조를 변경
DELETE tables 테이블의 행을 삭제
INDEX tables 인덱스를 생성하거나 삭제
INSERT tables or columns 행 추가
SELECT tables or columns 행 조회
UPDATE tables or columns 행 변경
CREATE TEMPORARY TABLES tables 임시 테이블의 생성
CREATE VIEW views 뷰의 생성
SHOW VIEW views SHOW CREATE VIEW
ALTER ROUTINE stored routines 프로시저, 함수의 변경 삭제
CREATE ROUTINE stored routines 프로시저, 함수의 생성
EXECUTE stored routines 프로시저, 함수의 실행
FILE file access on server host
  • LOAD DATA INFILE
  • SELECT..INTO OUTFILE
  • LOAD_FILE()
CREATE USER server administration
  • CREATE USER
  • DROP USER
  • RENAME USER
  • REVOKE ALL PRIVILEGES
PROCESS server administration 타인의 thread 실행 상태를 열람
  • SHOW PROCESSLIST
  • mysqladmin processlist

자신의 thread는 언제든지 열람가능

RELOAD server administration
  • flush-hosts
  • flush-logs
  • flush-privileges
  • flush-status
  • flush-tables
  • flush-threads
  • refresh
  • reload
REPLICATION CLIENT server administration
  • SHOW MASTER STATUS
  • SHOW SLAVE STATUS
REPLICATION SLAVE server administration 리플리케이션에 참가하고 있는 슬레이브 서버들이 마스터 서버(권한을 부여하는 서버) 접속해서 마스터의 변경사항을 동기화
SHOW DATABASES server administration
  • SHOW DATABASES
SHUTDOWN server administration
  • mysqladmin shutdown
SUPER server administration 다른 클라이언트를 종료하거나, 서버의 동작 변경
  • CHANGE MASTER TO
  • KILL
  • mysqladmin kill
  • PURGE BINARY LOGS
  • SET GLOBAL
  • 기타등등
ALL [PRIVILEGES] server administration 모든 권한 허용

 

댓글

댓글 본문
  1. ggyuker
    2022-01-13 수강완료
  2. 왕만두
    현재 MySQL 8.X 버전에서 해당 명령어 똑같이 입력하시면 아마 1064(42000) : ... 이렇게 뜨실텐데 문법오류입니다

    이렇게 사용해보세요

    CREATE USER `dev`@`%` IDENTIFIED BY '1234';

    GRANT DELETE,INSERT,SELECT,UPDATE ON class.* TO `dev`@`%`;

    지금은 저 아이디랑 host 값을 '' 작은따옴표로 묶어줘도 정상 실행됩니다
  3. cookie
    GRANT DELETE,INSERT,SELECT,UPDATE ON class.* TO `dev`@`%` IDENTIFIED BY '1234';
    이거 입력하면

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IDENTIFIED BY '1234'' at line 1

    이런 오류메시지뜨는데 이유 아시는분 있나요 ㅠ?
  4. 준일
    잘보고 있읍니다.
  5. sheis
    잘 봤어요^^
  6. NamJin Kim
    감사합니다
  7. JustStudy
    고맙습니다
  8. 이주환
    2016. 04. 13.
    정독했습니다.
    개인적으로 권한은 클라이언트를 이용해서 사용하는편이 권한에대한 정확성이 더 좋을거같네요.
    후에 게시판을 사용하게될 유저에대해 필요한 권한을 줘야할때 고려해야겠군요.
  9. 윤희진
    현업에서 권한쪽은 보통 홈페이지 유지보수관리나 서버관리쪽에서 마늬 작업하죠?
  10. WayneKing
    으아아!~~~~~~~~~~~~~~~!!!!!!!!!!!!!!!!!!!!!!!!!
  11. 조신부리
    감사합니다
  12. 아이반
    권한 부여가 잘 되지 않아 질문 좀 올리겠습니다.
    강의에서 성명하신대로 새로운 유저를 만들고 신규 테이타베이스를 만들었습니다.
    그런데 phpMyAdmin이나 Toad mysql를 사용하여 신규 유저로 접속하면 새로만든 class 데이터 베이스가 보이지 않습니다. test 라는 데이이터 베이스만 보이는데 성명하신대로 권한 부여 sql문은 성공적으로 실행했다고 오는데 신규 유저에서
    use class하면 Access denied for user ''@'localhost' to database 'class' 에러 메세지만 나옵니다.
    물론 root로 접속하면 class 잘 보이고 접속 가능합니다.
    머가 문제인 잘 모르겠습니다. 고수님들 좀 아려 주세요 ㅠㅠ
  13. giicha2
    좋은강의 감사합니다
  14. ujuc
    왜.. 전 항상 뒷북을 치는건지 모르겠지만.;;

    권한 템플릿에 설제자 권한에서...

    DELETE, INSERT, SELECT, UPDATE

    중복되서 보이는건.. 왜일까요....ㅡ.ㅡa.. [먼산].. 뭐 작동에는 문제가 없습니다만...
  15. f7000
    만약 계정 추가했는데 추가한 계정으로 접속안되시면
    GRANT DELETE,INSERT,SELECT,UPDATE ON class.* TO `dev`@`%` IDENTIFIED BY '1234';
    대신
    GRANT DELETE,INSERT,SELECT,UPDATE ON class.* TO `dev`@`localhost` IDENTIFIED BY '1234';
    로 하시면 됩니다.

    첫번째 것은 로컬,원격 전부 허용 되야할거 같은데 이상하게 원격에서의 접속만 되네요 ㅎㅎ
  16. 삽질맨
    insert로 mysql 데이타베이스 안에 있는 user 테이블에 일일히 값 다 쓰면서 사용자 추가하는걸 배웠는데.... 이렇게 쉬운 방법이 있다니 기쁘면서도 왠지 허망하네요. ㅎ