mysql> use mysql;
mysql> select user, host from user
user 추가
mysql> create user '사용자 이름 입력하세요'@'localhost(또는 %)' identified by '비밀번호 입력';
'localhost' or '%' or 'IP' : localhost는 해당 pc만 접속 , %는 외부의 모든 접속 가능, IP는 해당 IP만 접속 가능하다.
user 삭제
mysql> drop user '사용자명 입력'@'localhost';
해당 user의 접속 권한 또한 똑같이 입력해야 한다.
user DB 권한 부여 (Grant)
mysql> grant all privileges on *.* to '사용자'@'localhost';
mysql> grant all privileges on DB이름.* to '사용자'@'localhost';
mysql> grant all privileges on DB이름.테이블명 to '사용자'@'localhost';
mysql> grant select on DB이름.테이블명 to '사용자'@'localhost';
mysql> grant update(컬럼1, 컬럼2) on DB이름.테이블명 to '사용자'@'localhost';
1번 라인은 모든 DB, DCL을 제외한 권한을, 2번 라인은 특정 DB 권한 및 DCL을 제외한 권한을, 3번 라인은 특정 DB의 테이블에 대한 권한 4번 라인은 DB의 테이블에 대한 select 권한 5번 라인은 DB의 테이블에 대한 특정 컬럼 수정 권한이다.
이렇게 특정 DB의 권한을 줄 수도 있고 select, delect 등의 특정 권한만 줄 수도 있다.
all privieges는 모든 권한을 , *.*는 모든 DB의 모든 테이블을 뜻한다.
정리해보면 grant (권한) on (범위) to (user) 이렇게 정리할 수 있겠다.
1번 라인에 with grant option 을 맨 끝에 추가하면 권한 부여(ROOT 권한)을 부여한다.
user 권한 삭제 (Revoke)
이 부분은 Grant와 구조가 같다. 응용해서 특정 조건을 삭제할 수 잇다.
mysql> revoke all on DB명* from 'user'@'localhost';
우선 편리를 위해 루트계정으로 했다. 설정 자체는 루트계정이 아닐경우 수정이 안되는 경우가 많고 sudo를 계속 치면서 pw를 치는게 번거롭다.
1. 방화벽 포트포워딩.
- 서버와 내가 사용하는 PC는 다른 IP이기 때문에 너무 당연한 거였다.
이 부분은 결정적인 원인은 아니다.
2. 우분투 IP 및 포트 개방.
- OS에서 포트가 개방 되어있는지 그리고 IP가 로컬로 되어있는지 확인을 했다.
netstat 명령어를 사용하면 된다.
# netstat -tnlp
기본적으로 MySQL은 3306 포트를 사용한다.
우선 Local Address를 살펴보면 3306포트가 127.0.0.1로 되어있는것을 확인할 수 있다. 그렇단 뜻은 로컬에서만 mysql을 접속 할 수 있다. 이건 mysql 설정을 바꿔주면 된다. 우선 맨끝에 프로그램 이름을 확인하자. mysqld 라고 되어있다. 이걸 기억한 후 mysql 폴더로 가야한다.
cd /etc/mysql
ls -a
mysql 폴더는 etc 밑에 있다. cd 명령어를 통해서 이동 후 ls 명령어를 통해서 폴더 안에 어떤게 있는지 확인한다.
여기서부터 문제가 많았다.
이 설정은 os 버전과 mysql 버전에 따라 설정 파일이 다를 수 있다. 나도 이 부분에서 굉장히 헤맸다. 어떤 사람은 my.conf , mysql.conf, mysqld.conf ... 어떤 사람은 이 폴더에서 찾는 사람도 있다. 많은 시도 끝에 해결했다. 우선 아까 프로그램이름이 mysqld 였는데 이 폴더 안에는 같은 이름의 cnf가 없었다.
그래서 mysql.conf.d 폴더로 이동했다. 그 안에 mysqld.cnf 파일이 있었다.
cd mysql.conf.d
ls -a
vi mysqld.cnf
vi로 mysqld.cnf 파일을 편집하자.
bind-address가 있다. 그걸 0.0.0.0으로 바꿔주자. 그리고 :wq를 입력하고 나오면 된다.
수정했다면 mysql를 재실행한다.
service mysql restart
재실행했으면 아까 netstat 명령어로 IP가 제대로 설정됐는지 확인해보자
이렇게까지 했으면 이제 Mysql에서 user를 살펴봐야한다.
3. User 설정
mysql에 root 계정으로 접속한다.
mysql -u root -p
접속 한 후 데이터베이스를 선택한 후 user 테이블을 확인해보자.
mysql> use mysql;
mysql> select user,host from user;
user 테이블을 보면 host 컬럼에 localhost만 되어있다. 이 뜻은 외부 접속이 안된다.
그러면 user를 하나 생성해주자.
mysql> create user 'user'@'%' identified by '!QAZ2wsx';
'user'@'%'는 user는 user name이고 , % 는 외부의 모든 접근 허용이다.