VillageSQL is a drop-in replacement for MySQL with extensions.
All examples on this page work on VillageSQL. Install Now →
사용자 만들기
@'localhost' 부분은 호스트 제한입니다. 이 계정은 로컬 머신에서만 연결할 수 있습니다. 흔한 호스트 패턴:
'alice'@'localhost'와 'alice'@'%'는 사용자 이름이 같더라도 서로 다른 2개의 계정입니다.
권한 부여하기
database.table 표기법을 사용합니다:
*.*— 모든 데이터베이스, 모든 테이블(전역)myapp.*—myapp데이터베이스의 모든 테이블myapp.orders—orders테이블만
권한 수준
흔한 권한:
권한 보기
권한 회수하기
ERROR 1141: There is no such grant defined for user를 반환합니다. 사용자는 다른 수준에서 부여된 권한을 유지합니다. SELECT ON myapp.*를 회수해도, 따로 부여된 SELECT ON myapp.orders는 제거되지 않습니다.
비밀번호 변경하기
역할(MySQL 8.0+)
역할은 이름이 붙은 권한의 모음입니다. 각 사용자에게 개별 권한을 부여하는 대신, 역할을 부여하세요.사용자 삭제하기
최소 권한 모범 사례
각 계정에 필요한 권한만 주세요:- 애플리케이션 읽기 복제본:
SELECT만 - 애플리케이션 쓰기 계정:
SELECT,INSERT,UPDATE,DELETE - 애플리케이션 스키마 계정(마이그레이션):
CREATE,ALTER,DROP,INDEX추가 - DBA 계정:
*.*에 대한ALL PRIVILEGES - 애플리케이션 계정에는 절대
SUPER나ALL을 부여하지 않기
app.example.com의 애플리케이션은 'appuser'@'%'가 아니라 'appuser'@'app.example.com'을 사용해야 합니다.
자주 묻는 질문
MySQL은 권한을 자동으로 반영하나요?
CREATE USER, GRANT, REVOKE, ALTER USER를 통한 모든 변경은 즉시 적용됩니다. FLUSH PRIVILEGES는 필요하지 않습니다. FLUSH PRIVILEGES는 권한 테이블을 INSERT/UPDATE로 직접 수정할 때만 필요합니다(그렇게 해서는 안 됩니다).
localhost와 127.0.0.1의 차이는 무엇인가요?
MySQL에서 localhost는 네트워크 루프백이 아니라 Unix 소켓 연결(로컬 파일 소켓)을 가리킵니다. 127.0.0.1은 TCP 루프백입니다. 클라이언트가 같은 머신에서도 TCP로 연결한다면, 호스트 제한으로 127.0.0.1을 사용하세요.
문제 해결
함께 보기
- MySQL 보안 강화 — 사용자 권한을 보완하는 서버 수준 보안
- MySQL INFORMATION_SCHEMA — 명령 뒤에 있는 권한과 메타데이터 쿼리하기
- 흔한 MySQL 오류와 해결 방법 — 접근 거부와 다른 흔한 오류 해독하기
- JWT로 MySQL 사용자를 인증하는 방법 — 비밀번호 대신 토큰으로 로그인하는 계정