1. MySQL에 로그인
mysql -u root -p
Bash
복사
2. 사용자 생성
기본 구문
CREATE USER 'username'@'localhost' IDENTIFIED BY '비밀번호';
SQL
복사
예시
CREATE USER 'devuser'@'localhost' IDENTIFIED BY 'strongPassword123!';
SQL
복사
CREATE USER 'devuser'@'%' IDENTIFIED BY 'strongPassword123!';
SQL
복사
3. 권한 부여
예시: 특정 데이터베이스에 대한 전체 권한
GRANT ALL PRIVILEGES ON dbname.* TO 'devuser'@'localhost';
SQL
복사
예시: 읽기 전용 권한
GRANT SELECT ON dbname.* TO 'devuser'@'localhost';
SQL
복사
MySQL 권한 종류 (주요 권한)
권한 | 설명 |
SELECT | 조회 |
INSERT | 행 삽입 |
UPDATE | 행 수정 |
DELETE | 행 삭제 |
CREATE | 데이터베이스/테이블 생성 |
DROP | 테이블/데이터베이스 삭제 |
INDEX | 인덱스 생성 및 삭제 |
ALTER | 테이블 구조 변경 |
EXECUTE | 저장 프로시저 실행 |
REFERENCES | 외래 키 참조 권한 |
LOCK TABLES | 테이블 잠금 권한 |
SHOW VIEW | 뷰 보기 권한 |
CREATE VIEW | 뷰 생성 권한 |
다양한 권한을 포함한 사용자 권한 부여 쿼리
CREATE USER 'devuser'@'localhost' IDENTIFIED BY 'DevPass123!';
GRANT
SELECT,
INSERT,
UPDATE,
DELETE,
CREATE,
DROP,
INDEX,
ALTER,
EXECUTE,
CREATE VIEW,
SHOW VIEW,
LOCK TABLES
ON myappdb.* TO 'devuser'@'localhost';
FLUSH PRIVILEGES;
SQL
복사
부여된 권한 설명:
•
SELECT, INSERT, UPDATE, DELETE: 데이터 조작 (CRUD)
•
CREATE, DROP, ALTER: 테이블 생성/삭제/수정
•
INDEX: 인덱스 생성 및 제거
•
EXECUTE: 저장 프로시저 실행
•
CREATE VIEW, SHOW VIEW: 뷰 관련 작업
•
LOCK TABLES: 명시적인 테이블 잠금 사용 가능
!주의 - 너무 많은 권한을 부여하지 말 것
•
운영 환경에서는 ALL PRIVILEGES나 DROP, ALTER, CREATE 등은 꼭 필요한 사용자에만 부여한다.
•
특히 외부에서 접속 가능한 사용자(@'%')는 최소 권한 원칙을 따르는 것이 좋다.
4. 권한 적용
FLUSH PRIVILEGES;
SQL
복사
MySQL 8.0 이상에서는 FLUSH PRIVILEGES가 자동 적용되지만, 명시적으로 넣어주는 것이 안전하다.
5. 권한 확인 (선택)
SHOW GRANTS FOR 'devuser'@'localhost';
SQL
복사
6. 사용자 삭제 (필요 시)
DROP USER 'devuser'@'localhost';
SQL
복사
전체 흐름
CREATE USER 'devuser'@'localhost' IDENTIFIED BY 'DevPass123!';
GRANT ALL PRIVILEGES ON myappdb.* TO 'devuser'@'localhost';
FLUSH PRIVILEGES;
SQL
복사