개발자는 오늘도 달립니다.
[MYSQL] Mysql 설치, 설정 및 기본 계정 생성, 권한부여 (on Ubuntu) 본문
저 같은 경우에는 mysql db를 처음부터 설치 & 세팅하는 일이 자주 있는 일은 아니에요.
그래서 설치 & 세팅할 때마다 방법을 검색하곤 했었어요.
하지만 늘 찾아보는 번거로움을 없애기 위해 오늘은 제 블로그에 기록을 남기려고 해요!
- 필요 조건 (prequisite)
Ubuntu Server 18.04
1. apt (우분투 패키지 관리) 를 통한 mysql 설치
다음 명령어로 서버에 MySQL을 설치합니다.
sudo apt update
sudo apt install mysql-server
2. mysql 초기 설정 (secure installation)
아래와 같이 mysql_secure_installation 을 루트 권한으로 실행시켜줍니다!
sudo mysql_secure_installation
2.1 루트 암호을 설정할 것인지에 대한 질문이므로 Y 선택 후 원하는 패스워드를 입력해주세요.

2.2 익명의 계정을 허용할 것인지 묻고 있습니다. 물론 N을 해줍니다.

2.3 루트계정을 원격지에서 허용할 건지에 대한 질문인데 저는 Y를 선택하여 허용하지 않았습니다.

2.4 기본으로 생성하는 test database는 지워주도록 할게요.

2.5 현재까지의 내용을 적용하기 위해 Y를 입력했습니다.

2.6 모든 설정이 완료되었고 아래 커맨드로 접속해볼게요~!
sudo mysql -u root -p

명령 커맨드 창이 나오면서 커서가 깜빡깜빡~ 위와 같이 나온다면 접속이 잘된 거예요~! 와우 우우
3. root 계정 패스워드 초기 설정
패스워드를 변경하는 방법은 mysql 버전별로 상이하기 때문에 버전 먼저 체크하도록 하겠습니다.
SHOW VARIABLES LIKE "%version%";

버전을 확인한 결과! mysql 버전은 5.7.33 입니다.
5.7.6 이후 버전이라면 아래와 같이 쿼리를 실행합니다. 패스워드를 changepass로 하겠습니다.
ALTER USER 'root'@'localhost' IDENTIFIED BY 'changepass';

만약 5.7.6 이전 버전이라면 아래와 같이 쿼리를 실행하면 됩니다.
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('changepass');

상위 버전이라면 두 가지 방법 모두 가능합니다.
4. 신규 계정 생성 및 설정
이제 mysql을 사용할 계정을 만들어 주겠습니다. 웹 서버 등과 연결해 사용할 때는 root 계정을 사용하는 것보다 계정을 만들고 권한을 부여해 사용하는 것이 좋습니다.
먼저 현재 mysql의 계정(User) 정보를 확인하겠습니다.
SELECT User, Host, authentication_string FROM mysql.user;

mydatabase라는 데이터베이스를 만들고 거기에 계정을 생성하도록 하겠습니다.
CREATE DATABASE mydatabase;

데이터베이스 리스트를 확인하기 위해선 아래 쿼리를 날려주세요!
SHOW DATABASES;

위 캡처에 보시면 mydatabase가 보입니다!!
그럼 계정을 만들도록 할게요. (user: mhlee, pass: mhleepass)
CREATE USER 'mhlee'@'localhost' IDENTIFIED BY 'mhleepass';

mysql.user 테이블에서 변경된 내용이 있다면 flush privileges 를 해주셔야 합니다.
flush privileges;

유저가 잘 생성되었는지 확인해주시고..
SELECT User, Host, authentication_string FROM mysql.user;

새로 생성 한 mhlee 계정에서 mydatabase 데이터베이스를 사용할 수 있는 권한을 부여하겠습니다.
GRANT ALL PRIVILEGES ON mydatabase.* to mhlee@localhost;

다시 한번 flush privileges 를 해주시고..
flush privileges;

mhlee 계정이 localhost에 어떤 권한을 부여받았는지 확인 들어갑니다.
SHOW GRANTS FOR 'mhlee'@'localhost';

GRANT USAGE ON *.* TO 'mhlee'@'localhost'
(이건 *.*는 아무 권한이 없다는 의미입니다. mhlee 계정은 mydatabase 데이터베이스의 모든 권한을 가지고 있고 mysql의 admin이나 system을 접근할 수 있는 권한은 없다는 것을 의미합니다.
계정 뒤에 붙은 @localhost는 해당 계정이 localhost 즉 mysql이 설치된 로컬에서만 접속할 수 있다는 의미입니다. 만약 다른 서버(remote)에서 접속하고 싶다면 접속하려는 서버의 IP로 계정을 새로 만들어 줘야 합니다.)
예를 들어 192.168.0.10 에서 접속하고 싶다면 아래와 같이 쿼리를 실행하면 됩니다.
CREATE USER 'user1'@'192.168.0.10' IDENTIFIED BY 'mhleepass';
GRANT ALL PRIVILEGES ON * . * TO 'user1'@'192.168.0.10' WITH GRANT OPTION;
FLUSH PRIVILEGES;
만약 특정 PC(192.168.0.10)이 아닌 어디서든 접속하려면 IP 대신 %로 해주면 됩니다.
CREATE USER 'user2'@'%' IDENTIFIED BY 'mhleepass';
GRANT ALL PRIVILEGES ON * . * TO 'user2'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
생성했던 mhlee, user1, user2 계정이 잘 추가되었는지 확인해줍시다.

mhlee 계정이 localhost 에서만 접근이 가능하도록 되어있는데 모든 외부 IP 에서 접근이 가능하기 위해 아래와 같이 바꿔주시면 됩니다!
GRANT ALL PRIVILEGES ON *.* TO 'mhlee'@'%' IDENTIFIED BY 'mhleepass';
FLUSH PRIVILEGES;
마지막으로 권한을 삭제하기 위해선 아래 커맨드를 활용하시면 되겠습니다.
REVOKE DELETE ON *.* FROM mhlee@'%' IDENTIFIED BY 'mhleepass';