MySQL 사용자 관리 명령어 (Ubuntu)

MySQL 서비스 상태 확인 및 관리

# 서비스 상태 확인
sudo systemctl status mysql

# MySQL 서비스 시작
sudo systemctl start mysql

# MySQL 서비스 중지
sudo systemctl stop mysql

# MySQL 서비스 재시작
sudo systemctl restart mysql

# 부팅 시 자동 시작 설정
sudo systemctl enable mysql

# 자동 시작 해제
sudo systemctl disable mysql

MySQL 접속

로컬 접속

# root 사용자로 접속
sudo mysql -u root -p

# 특정 사용자로 접속
mysql -u username -p

# 데이터베이스 지정하여 접속
mysql -u username -p database_name

원격 접속

# 원격 서버 접속
mysql -h hostname_or_ip -u username -p

# 포트 지정 접속
mysql -h hostname_or_ip -P 3306 -u username -p

사용자 계정 관리

사용자 생성

-- 로컬 접속만 허용하는 사용자 생성
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

-- 특정 IP에서만 접속 허용
CREATE USER 'username'@'192.168.1.100' IDENTIFIED BY 'password';

-- 특정 도메인에서만 접속 허용
CREATE USER 'username'@'%.example.com' IDENTIFIED BY 'password';

-- 모든 호스트에서 접속 허용 (보안상 주의)
CREATE USER 'username'@'%' IDENTIFIED BY 'password';

-- 패스워드 없는 사용자 생성
CREATE USER 'username'@'localhost';

사용자 목록 조회

-- 모든 사용자 조회
SELECT user, host FROM mysql.user;

-- 특정 사용자 조회
SELECT user, host FROM mysql.user WHERE user = 'username';

-- 현재 접속 중인 사용자 확인
SELECT USER();
SELECT CURRENT_USER();

-- 사용자의 권한 정보와 함께 조회
SELECT user, host, password_expired, account_locked FROM mysql.user;

사용자 삭제

-- 사용자 삭제
DROP USER 'username'@'host';

-- 여러 사용자 동시 삭제
DROP USER 'user1'@'localhost', 'user2'@'%';

-- 존재하지 않을 수도 있는 사용자 삭제 (에러 방지)
DROP USER IF EXISTS 'username'@'localhost';

계정 잠금/해제

-- 계정 잠금
ALTER USER 'username'@'host' ACCOUNT LOCK;

-- 계정 해제
ALTER USER 'username'@'host' ACCOUNT UNLOCK;

-- 잠금 상태 확인
SELECT user, host, account_locked FROM mysql.user WHERE user = 'username';

웹 애플리케이션용 사용자 생성

-- 데이터베이스 생성
CREATE DATABASE webapp_db;

-- 사용자 생성 및 권한 부여
CREATE USER 'webapp_user'@'localhost' IDENTIFIED BY 'secure_password123';
GRANT SELECT, INSERT, UPDATE, DELETE ON webapp_db.* TO 'webapp_user'@'localhost';
FLUSH PRIVILEGES;

읽기 전용 사용자 생성

-- 읽기 전용 사용자
CREATE USER 'readonly_user'@'%' IDENTIFIED BY 'readonly_password';
GRANT SELECT ON *.* TO 'readonly_user'@'%';
FLUSH PRIVILEGES;

백업 전용 사용자 생성

-- 백업 사용자 생성
CREATE USER 'backup_user'@'localhost' IDENTIFIED BY 'backup_password';
GRANT SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER ON *.* TO 'backup_user'@'localhost';
FLUSH PRIVILEGES;

비밀번호 관리

비밀번호 변경

-- 현재 사용자의 비밀번호 변경
ALTER USER USER() IDENTIFIED BY 'new_password';

-- 특정 사용자의 비밀번호 변경 (MySQL 8.0 이상 권장)
ALTER USER 'username'@'host' IDENTIFIED BY 'new_password';

-- 이전 버전의 MySQL
SET PASSWORD FOR 'username'@'host' = PASSWORD('new_password');

root 비밀번호 초기화

# 1. MySQL 서비스 중지
sudo systemctl stop mysql

# 2. 권한 테이블 없이 MySQL 시작
sudo mysqld_safe --skip-grant-tables &

# 3. root로 비밀번호 없이 접속
mysql -u root

# 4. MySQL 내부에서 비밀번호 변경 (MySQL 8.0 기준)
mysql> FLUSH PRIVILEGES;
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

# 5. MySQL 종료 후 정상 재시작
mysql> exit
sudo systemctl restart mysql

권한 관리

권한 부여

-- 모든 데이터베이스 목록 보기
SHOW DATABASES;

-- 특정 사용자의 권한이 있는 데이터베이스 확인
SHOW GRANTS FOR 'username'@'host';

-- 모든 데이터베이스에 모든 권한 부여
GRANT ALL PRIVILEGES ON *.* TO 'username'@'host';

-- 특정 데이터베이스에 모든 권한 부여
GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'host';

-- 특정 테이블에 권한 부여
GRANT SELECT, INSERT, UPDATE ON database_name.table_name TO 'username'@'host';

-- 읽기 전용 권한
GRANT SELECT ON database_name.* TO 'username'@'host';

-- 특정 컬럼에만 권한 부여
GRANT SELECT (column1, column2) ON database_name.table_name TO 'username'@'host';

-- WITH GRANT OPTION (다른 사용자에게 권한 부여 가능)
GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'host' WITH GRANT OPTION;

권한 조회

-- 특정 사용자의 권한 조회
SHOW GRANTS FOR 'username'@'host';

-- 현재 사용자의 권한 조회
SHOW GRANTS;

-- 모든 사용자의 권한 요약
SELECT user, host, Select_priv, Insert_priv, Update_priv, Delete_priv 
FROM mysql.user;

권한 제거

-- 특정 권한 제거
REVOKE INSERT, UPDATE ON database_name.* FROM 'username'@'host';

-- 모든 권한 제거
REVOKE ALL PRIVILEGES ON *.* FROM 'username'@'host';

-- GRANT OPTION 제거
REVOKE GRANT OPTION ON database_name.* FROM 'username'@'host';

권한 적용

-- 권한 변경사항 즉시 적용
-- 권한 관련 오류 시 권한 테이블 새로고침
FLUSH PRIVILEGES;

주요 권한 종류

권한설명
ALL PRIVILEGES모든 권한
SELECT데이터 조회
INSERT데이터 삽입
UPDATE데이터 수정
DELETE데이터 삭제
CREATE테이블/데이터베이스 생성
DROP테이블/데이터베이스 삭제
ALTER테이블 구조 변경
INDEX인덱스 생성/삭제
LOCK TABLES테이블 잠금
CREATE USER사용자 생성
RELOAD권한 새로고침
SHUTDOWN서버 종료

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤