728x90
[MySQL] MySQL 설치 후 Database 생성
1. 데이터베이스 생성
CREATE DATABASE my_database
CHARACTER SET utf8mb4
COLLATE utf8mb4_0900_as_cs;
- 'my_database' : 만들고자 하는 DB 이름
- 'utf8mb4' : 이모지까지 지원하는 문자 인코딩(표준)
- 'utf8mb4_0900_as_cs' : 유니코드 9.0 기준, 대소문자 구분
문자 인코딩은 현재 표준으로 utf8mb4
를 사용한다. 따라서 해당 값을 넣어주면 되고 정렬 규칙은 아래 특징에 따라 사용하고자 하는 Collation을 사용하면 된다.
Collation | 의미 | 특징 |
utf8mb4_0900_ai_ci | Accent-insensitive, Case-insensitive | 기본값. 빠르고 넓은 유니코드 범위 지원 |
utf8mb4_0900_as_cs | Accent-sensitive, Case-sensitive | 대소문자 구분 & 악센트 구분 |
utf8mb4_general_ci | 오래된 기본값 | 빠르지만 유니코드 정확도 떨어짐 |
utf8mb4_unicode_ci | 유니코드 표준 기반 | 정렬 정확도는 높음, 성능은 조금 느릴 수 있음 |
아래는 utf8mb4_0900_ai_ci
사용 할 때와 utf8mb4_0900_as_cs를 사용했을 때 조회 결과이다.
-- Collation: utf8mb4_0900_ai_ci (Case-insensitive, Accent-insensitive)
CREATE TABLE user_ci
(
name VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci
);
-- Collation: utf8mb4_0900_as_cs (Case-sensitive, Accent-sensitive)
CREATE TABLE user_cs
(
name VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_as_cs
);
INSERT INTO user_ci (name)
VALUES ('Jdong'),
('jdong'),
('Jdöng');
INSERT INTO user_cs (name)
VALUES ('Jdong'),
('jdong'),
('Jdöng');
-- 1. Case-Insensitive에서 검색
SELECT *
FROM user_ci
WHERE name = 'jdong';
-- 2. Case-Sensitive에서 검색
SELECT *
FROM user_cs
WHERE name = 'jdong';
결과 비교
Collation | 조회 결과 |
utf8mb4_0900_ai_ci | jdong, Jdong, Jdöng 모두 조회 됨 |
utf8mb4_0900_as_cs | Jdong 만 조회 됨 |
2. 유저 생성
CREATE USER 'my_user'@'localhost'
IDENTIFIED BY 'my_password';
- 'my_user' : 생성할 유저 명
- 'localhost' : 유저가 접속 가능한 위치
- 'my_password' : 비밀번호
💡 만약 외부에서 접속하도록 허용하고 싶으면 'localhost' 대신 '%' 사용 (예: 'my_user'@'%')
만약 아래와 같은 오류가 발생한다면 비밀번호 정책에 위반된다는 뜻이다.
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
기본적으로 강력한 비밀번호(대소문자 포함, 특수문자 포함, 길이 제한)로 설정되어 있기 때문에 현재 비밀번호 정책에 맞는 비밀번호를 사용하거나 아래와 같이 비밀번호 제약이 느슨한 정책으로 수정하는 방법이 있다. 로컬에서 공부 및 개발 목적이라면 아래 방법을 사용하여 기억하기 쉬운 비밀번호로 설정해도 괜찮다.
# 간단한 비밀번호 정책으로 변경
SET GLOBAL validate_password.policy = LOW;
# 비밀번호 길이 제약조건 변경
SET GLOBAL validate_password.length = 6;
3. 권한 부여
GRANT ALL PRIVILEGES ON my_database.* TO 'my_user'@'localhost'; # 모든 권한 부여
GRANT SELECT ON my_database.* TO 'my_user'@'localhost'; # 조회 권한만 부여
- 'my_database.*' : my_database DB 내 모든 테이블을 대상
- 'ALL PRIVILEGES' : SELECT, INSERT, UPDATE 등 모든 권한 부여
주요 권한
권한 | 설명 |
SELECT | 데이터 조회 가능 |
INSERT | 데이터 삽입 가능 |
UPDATE | 데이터 수정 가능 |
CREATE | 테이블, 뷰 등의 객체 생성 가능 |
DROP | 테이블, 뷰 등의 객체 삭제 가능 |
INDEX | 인덱스 생성/삭제 가능 |
ALTER | 테이블 구조 변경 가능 |
EXECUTE | 저장 프로시저 실행 가능 |
GRANT OPTION | 다른 사용자에게 권한을 부여할 수 있음 |
ALL PRIVILEGES | 위 모든 권한 가능 |
4. 권한 적용
MySQL은 권한 정보를 캐싱하고 있기 때문에, 변경 사항을 적용하려면 아래 명령어를 실행해야 한다.
FLUSH PRIVILEGES;
728x90
'Backend > Mysql' 카테고리의 다른 글
[MySQL] Deadlock(교착 상태) 원인 (0) | 2024.10.27 |
---|---|
[Mysql] Lock Type (1) | 2024.10.27 |
[MySQL] index 생성 시 고려할 점 (0) | 2024.10.20 |