Spring Boot 환경에서 MySql을 연동했을 때 정상적으로 연동되던 mysql이 vscode IDE [개발] 환경에서 Node.js + MySql를 연동해 보니 발생했던 에러에 대해서 원인도 제대로 못 찾고 당황했던 것이 남아서 다음에는 동일한 에러를 만났을 때 잘 넘어갈 수 있도록 하기 위해서 기록을 남깁니다.
ERROR 1410 (42000): You are not allowed to create a user with GRANT |
root 권한에게 또는 DB 최고 관리자에게서 권한이 주어지지 않은 경우 발생하는 에러입니다.
sts환경에서는 DB를 연결했을 때 포트번호와 이름만 제대로 연결했다면 크게 문제가 없었는데 vscode 환경에서는 크게 문제가 되는 경우가 존재해서 뭔가 싶어서 알아봤더니 권한 자체가 없어서 발생한 문제라고 알게 됐습니다.
DB는 MYSQL을 사용하고 있었는데 이런 경우 cmd 창에서 따로 권한을 부여하여 연결을 진행해줘야 한다고 확인했습니다.
여기서 위 계정처럼 Connections 되는 본인 계정의 비밀번호를 알고 있어야 합니다.
로컬[local]의 경우에는 학습용으로 연습하는 경우가 많아서 비밀번호를 1234를 많이 사용하시는데 서버에서 사용되는 경우 포트번호나 비밀번호를 보안상의 이유로 매우 조심스럽게 사용하는 것을 권장드립니다.
팀원이 아닌 타인에게 비밀번호를 알려주면 큰일 나는 경우 서버의 있는 모든 데이터들이 유출되는 경우가 발생할 수 있으니 주의합시다!
다시 한번 더 얘기드리지만 권한을 부여하기 위해서는 MySQL의 아이디와 비밀번호를 알고 있어야 합니다.
cmd창에 들어가서 mysql -u root -p를 엔터를 쳐서 진행해 주시는데 이때 root는 아이디를 의미합니다 root가 아닌 다른 아이디로 이름을 작성한 경우 다음의 형식의 mysql -u [아이디] -p에서 [아이디] 칸에 값을 넣어주시고 엔터를 입력하시면 됩니다.
-p는 root아이디의 비밀번호를 친다는 얘기입니다. 본인 계정이 root이며, 비밀번호가 123456이라면 mysql -u root -p이후에 password 창에서 123456을 쳐서 들어가 주시면 됩니다.
다음의 명령어들은 cmd창 즉, 명령 프롬프트에서 진행을 해줘야 합니다.
CREATE USER 'root'@'%' IDENTIFIED BY '1234'; |
''칸에 들어갈 내용으로 첫 번째 ''은 아이디 마지막 BY ''공백은 비밀번호 위치입니다.
GRANT ALL PRIVILEGES ON [데이터베이스 이름 ex) mydb].* TO '[권한 아이디 ex) root]'@'%'; |
다음의 과정을 통해서 DB에 권한을 부여합니다.
flush privileges; |
다음의 명령어를 cmd창에 넣어주면 위의 명령어들의 설정한 권한을 반드시 적용시켜준다.
하나로 정리하면 다음과 같습니다.
1. 명령 프롬포트 = cmd 창을 열어줍니다. 2. mysql -u root -p 명령어를 입력합니다. -p를 입력까지 정상적으로 입력됐다면 password를 입력하는 창이 나옵니다. 이때 본인이 설치 시 작성했던 것과 맞는 비밀번호를 입력합니다. 3. 사용자 생성 ex) CREATE USER '이름'@'%' IDENTIFIED BY '1234'; 이름 영역에서는 root를 로컬에서 가장 대중적으로 사용하기 때문에 다음과 같이 작성합니다. CREATE USER 'root'@'%' IDENTIFIED BY '1234'; 4. DB 권한 부여 ex) GRANT ALL PRIVILEGES ON mydb.* TO 'root'@'%'; mydb는 본인이 생성했던 스키마의 아이디입니다. 만약 servicedb라는 데이터 베이스 이름이 있다면 다음과 같이 입력합니다. GRANT ALL PRIVILEGES ON servicedb.* TO 'root'@'%'; 5. 명령어를 DB에 입력하고 적용합니다. flush privileges; 6. 모든 생성 또는 권한 부여가 끝났다면 exit을 작성하여 cmd 창도 마무리 짓습니다. |
이 과정이 끝나면서 저는 vscode에서 db연동만 하면 잡히던 error는 모두 잡혔습니다.
++ db를 다른 곳에서 접속하는 방법으로 다음과 같은 방법도 존재합니다.
로컬과 git을 원격으로 접속하는 경우 입니다. - grant all privileges on *.* to userid@'%' identified by 'password'; 로컬내에서 모든 권한을 주는 경우입니다. - grant all privileges on *.* to userid@host identified by 'password'; |
*번외로 학습할 때 메모했던 명령어들을 기록합니다.
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '1234'; SELECT Host,User,plugin,authentication_string FROM mysql.user; CREATE USER 'root'@'localhost' identified by '1234'; GRANT ALL PRIVILEGES ON *.* to 'root'@'localhost'; flush privileges; mysql_native_password BY '1234'; |
추가적으로 제가 잘못 이해하거나 알고 있는 사항이 존재한다면 댓글로 얘기 주시면 감사드리겠습니다!
포스팅 읽어주셔서 감사드립니다!
'Error 모음' 카테고리의 다른 글
[ERROR] [Eclipse] Cannot invoke substring (0) | 2022.08.01 |
---|---|
[ERROR] [이클립스 Eclipse] Save Failed illegal value 에러 (0) | 2022.07.26 |
[ERROR] Launch configuration JavaToJavaConverter.213 에러 (0) | 2022.07.26 |
[ERROR] typeerror cannot read properties of undefined (0) | 2022.05.11 |
[ERROR] VSCODE 환경에서 GitHub Push시 발생하는 에러 Please clean your repository working tree before checkout. (0) | 2022.03.28 |