상세 컨텐츠

본문 제목

[sql intellij 연동문제]

데이터베이스

by esoesmio 2023. 4. 10. 03:22

본문

ec2 인스턴스에서 임대한 서버에 apm이나 nginx mysql php 등등 을 구축해서

 

사용을 하려다 보면 예상치 못한 오류들을 만나는데요 

 

권한과 관련된 문제들도 많이 만나고, ec2의 경우 유저명과 관련된 오류도 만나고...(ubuntu, ec2-user...)

 

..... 방화벽과 관련된 문제들도 만나는데요

 

저는 데이터그립과 ec2 서버에 설치된 mysql 데이터 베이스를 연동해서 사용하려 하는데 test connection에서

 

오류가 나타나서 확인해보니

 

ec2에 설치된 mysql 이 외부에서 접속이 가능하도록 해주어야 연결이 되더군요  !

 

아래와 같이 입력 하셔서 외부접속을 허용해주시면 됩니다. !

 

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root의 패스워드';

 

 

 

 

 

 

 

안녕하세요 🙋 🙋‍♀️

MySQL을 처음 설치하고, 외부에서 접속해보려고 하면 이런 에러가 나옵니다.

mysql -h <mysql아이피> -u root -p

ERROR 1130 (HY000): Host '14.52.234.161' is not allowed to connect to this MySQL server

MySQL은 기본적으로 로컬(Localhost)에서만 접속이 허용됩니다. 
MySQL 사용자를 살펴볼까요?

mysql> SELECT Host,User,plugin,authentication_string FROM mysql.user;

유저가 다 "localhost"로 표시되어있습니다. 이 경우, 외부에서부터의 접속이 불가능 합니다.
그래서 이번 시간에서는 외부에서 접속할 수 있도록 계정을 설정해보도록 하겠습니다. :)

* 주의 * 이번 포스팅에서는 Root계정을 변경하지만, 보안 상 Root계정 외 별도의 계정을 만들어 사용하기를 권장합니다.

 

먼저, 사용자를 생성합니다 :)

mysql> CREATE USER 'root'@'%' identified by 'Xptmxm1212!@';

 

이제 권한을 할당합니다.

mysql> GRANT ALL PRIVILEGES ON *.* to 'root'@'%';

 

새로고침 합니다!

mysql> flush privileges;

 

벌써 완료 되었습니다.
유저가 정상적으로 생성되었는지 확인해줍니다. 😊👍🏻

mysql> SELECT Host,User,plugin,authentication_string FROM mysql.user;

 

이제 외부에서 접속이 잘 되는지 확인해봅시다!! 

이제 외부에서도 접속이 잘 되네요!! :)


참고 : zetawiki.com/wiki/MySQL_%EC%9B%90%EA%B2%A9_%EC%A0%91%EC%86%8D_%ED%97%88%EC%9A%A9

 

MySQL 원격 접속 허용 - 제타위키

다음 문자열 포함...

zetawiki.com

 

Creating and Using a Database

데이타 베이스 생성 및 사용

 

1) 데이타베이스 목록 보기

mysql> show databases ;

 

2) 데이타베이스 생성

mysql> create database testdb;

 

3) 데이타베이스 access

mysql> use testdb

semicolon(;) 이 없어도 된다. 

 

4) 현재 내가 로그인 해서 사용중인/접속중인 데이타베이스 확인

mysql > select database();

 

5) db중에서 mysql, test db description

The mysql database describes user access privileges. The test database often is available as a workspace for users to try things out.

 

6) 사용자 생성

mysql> create user 'aaaa'@'localhost' identified by 'password';

 

7) 권한 부여

mysql> grant all privileges on testdb.* to 'aaaa@localhost' with grant option ;

 

8) 데이타 베이스 삭제

mysql> drop databse testdb;

 

 

 

 

* ERROR 1410 (42000): You are not allowed to create a user with GRANT

root로 접속해서 권한을 부여하는데도 위와 같은 오류가 발생하였다.

 

CREATE USER 'root'@'%' IDENTIFIED BY 'root';

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

 

를 실행한 후에 다시 사용자에게 권한을 부여하니 된다.

 

 

 

글을 시작하기에 앞서

댓글을 달아주신 분들의 의견중

root 계정에 모든 권한 허용시

DB 가 외부에 노출이 되면 위험하다는 의견이 있었습니다.

만약 해당 사항이 있으시다면 이점 참고하여 주시기 바랍니다.


 

MYSQL 에서 DB를 생성하고 유저에게 권한을 주려고 할 때

 

root 로 접속했음에도

 

ERROR 1410 (42000): You are not allowed to create a user with GRANT

 

라는 에러를 내뿜으며 유저에게 권한주기 권한이 없다는 에러가 발생한 적이 있었습니다.

 

약간의 구글링을 통하여 해결방안을 찾아냈습니다.

 

우선

 

CREATE DATABASE testDB;

 

쿼리로 데이터베이스를 생성해 준 후

 

CREATE USER testUser@localhost identified by 'password';

 

쿼리로 유저를 생성 해 주었습니다.

그리고

 

GRANT ALL PRIVILEGES ON testDB.* TO 'testUser'@'localhost' WITH  GRANT OPTION;

 

쿼리를 날려서 권한을 주려고 했는데

위와같은 에러가 발생을 하였습니다.

 

해결방안은

 

CREATE USER 'root'@'%' IDENTIFIED BY 'root';

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

 

위의 두 쿼리로 루트 계정을 생성하고 

생성된 계정에 먼저 권한을 부여 한 후

 

권한을 주는 쿼리를

 

GRANT ALL PRIVILEGES ON testDB.* TO 'testUser'@'%' WITH GRANT OPTION;

 

로 수정하여 권한을 부여하니 잘 동작하였습니다.

 

 


 

+ 추가

 

댓글을 달아주신 분들에 의하면

 

CREATE USER 'root'@'%' IDENTIFIED BY 'root';


root권한을 가진 유저를 만드는 거라 외부로 노출된 db이면 상당히 위험합니다.

프로젝트나 내부에서만 쓰이는 거면 괜찮을 수도 있지만 그 외에는 안됩니다.

정말 필요한 작업만하시고 외부 권환하고 삭제하셔야 합니다.

 

 

라고 알려주셨습니다.

 

꼭 필요한 경우만 사용하시고 삭제하시거나 

혹시나 더 좋은 해결 방안이 있으신 분들은

댓글로 알려주시면 감사하겠습니다.

ERROR 1396 (HY000): Operation CREATE USER failed for

 

MySQL에서 새로운 계정을 생성하려고 하면 다음과 같은 에러가 발생할 때가 있다.

 

 

근본적인 원인은 계정 생성 및 권한 부여를 mysql.user, mysql.db에서 직접 조작을 하였기 때문이다. 

select * from mysql.user 혹은 select * from mysql.db를 하면 생성 또는 권한을 부여하려는 계정이 이미 존재하고 있을 것이다.

 

따라서 다음 명령어들을 통해 데이터를 삭제 후 다시 생성을 해주어야 한다.

delete from mysql.user where User ='삭제할 아이디';

delete from mysql.db where User ='삭제할 아이디';

flush privileges;

 

계정 생성 및 권한 부여는 테이블에 직접 접근이 아닌 create와 grant를 이용하는 것을 적극 권장한다.

관련글 더보기

댓글 영역