mysql 유저 추가하기 : 시작이 반이다.

코딩/Sql 2020. 8. 14. 02:11

 데이터 베이스를 다루실 때, User를 관리하는 것도 꽤 중요한 일 중 하나입니다. mysql에서 유저를 어떻게 추가하는지 간단하게만 짚고 넘어가 보겠습니다. 8버전 들어오고 나서 부터, 인증 방식도 상당히 많아졌는데, 이들에 대해서는 천천히 알아보도록 하겠습니다. 당연하게도, 공식 레퍼런스 문서인 링크에 설명이 잘 되어 있습니다. 이것을 기반으로 간단하게 실습만 해 보도록 하겠습니다.

 


 레퍼런스에 따르면, mysql.user에 무언가 특별한 정보들이 저장이 되어 있다고 합니다. 이 중에서 여기서 다룰 중요한 정보들만 짚고 넘어가 보겠습니다.

 

 

 Host와 User, PlugIn을 보겠습니다. User는 유저 이름이고, Plugin은 무엇인지는 잘 모르겠습니다만, caching_sha2_password가 눈에 들어옵니다. 어떤 것인지는 자세히 모르겠지만, 패스워드 인증 방식을 쓰는데, sha2를 쓴다 정도는 아실 수 있습니다. 그리고 1번째 필드에 Host가 있는데요. %하고 localhost가 있습니다. %은 무엇인지 잘 모르겠지만, localhost는 loopback을 나타냅니다.

 

 이것이 무슨 역할을 하는지는 눈치를 채신 거 같습니다만, 밑에서 후술하겠습니다.

 

 

 다음에 priv가 있는데요. 이는 권한을 의미합니다. 예를 들자면, Select_priv는 select를 할 수 있는 권한을 의미합니다. 당연하게도, 이러한 권한들은 조심스럽게 주어야 합니다. 예를 들자면 데이터베이스를 삭제할 권한. 누군가의 실수로 인해서 중요한 데이터가 들어 있는 db가 삭제 당했다면? 끔찍합니다.

 

 

 다음에 authentication_string이 있습니다. 왠 이상한 문자열이 들어있는 것을 알 수 있는데요. 암호화된 문자열입니다. 일단 이 정도만 보고, 유저를 추가해 보도록 하겠습니다.

 


 아래 그림은, user를 추가하는 명령입니다. 

 

 create user  'username'@'host' identified with plugin 라고 입력을 하면, plugin으로 인증을 하는 username을 생성한다는 의미입니다. 그런데, password로 인증을 하니, 추가 인자인 패스워드가 필요한데요. by 절 뒤에 password를 적어주면 됩니다. mysql 8인가요? caching_sha2_password는 default이니, 저래 작성하시면 됩니다.

 

 작성하신 후에 User 테이블에서 User명만 뽑아보면, test가 추가되었음을 알 수 있습니다.

 

 

 flush privileges를 입력하고 exit를 눌러서 나간 다음에, test 유저로 접속해 보겠습니다.

 

 

 그러면 접속은 됩니다. 접속은 되지만, 권한이 주어지지 않았습니다.

 

 

 이제 제 노트북에서 데스크탑으로 접속을 해 볼겁니다. 접속을 해 볼 건데요. 비밀번호까지 맞게 입력을 했음에도 접속을 할 수 없다. denied가 되었다고 메세지가 뜸을 알 수 있습니다. 이는 test 유저로 데스크탑에 있는 mysql에 노트북으로 접속할 때에는, access를 할 수 없기 때문입니다. 

 

 

 이제, test2 유저를 생성할 건데, host를 '%'으로 해 보겠습니다. 이것은 allow to every를 뜻합니다. 모든 장소에서 test2라는 유저로는 접속이 가능하다는 의미입니다.

 

 

 노트북에서 접속을 해 보겠습니다.

 

 

 잘 들어가지네요. 이는 모든 장소에서 desktop에 있는 db에 접속을 allow 하였기 때문입니다. user가 어디서 접속하는 것을 허용할 것인지에 대해서 host에 쓸 수 있다는 의미입니다. host가 localhost라면, 자기 자신에서 접속하는 것만 allow를 하고, '%'를 입력했다면, 모든 장소에서 접속하는 것을 allow 하겠다는 것입니다. 즉, 접속할 수 있는 location을 한정지어주는 역할을 합니다. 이 글에서는 유저를 생성하고, user 테이블에 대해서 간략하게 설명하였습니다.

 

 x509와 같은 필드도 설명하면 끝도 없지만, 이 정도만 알아도 mysql에서 유저를 생성하기만 하는 데에는 큰 문제가 없으리라 생각합니다.