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
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이면 상당히 위험합니다.
프로젝트나 내부에서만 쓰이는 거면 괜찮을 수도 있지만 그 외에는 안됩니다.정말 필요한 작업만하시고 외부 권환하고 삭제하셔야 합니다.
라고 알려주셨습니다.
꼭 필요한 경우만 사용하시고 삭제하시거나
혹시나 더 좋은 해결 방안이 있으신 분들은
댓글로 알려주시면 감사하겠습니다.
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를 이용하는 것을 적극 권장한다.
[4월13일]중요한 수업내용 서브쿼리 차집합 교집합 합집합 (0) | 2023.04.13 |
---|---|
[오라클]4월 13일 문제와 문제풀이 (0) | 2023.04.13 |
[오라클]4월 13일 수업 예제 문제만 (1) | 2023.04.13 |
[쿼리문제]4.12 (0) | 2023.04.12 |
[4월 12일 쿼리]수업내용 (0) | 2023.04.12 |
댓글 영역