Intro.

RDS에서 특정 테이블에서 Trigger를 생성했는데, 완료 버튼을 누름과 동시에 "SQL 오류 (1419): You do not have the SUPER privilege and binary logging is enabled (you might want to use the less safe log_bin_trust_function_creators variable) " 라는 에러를 만났습니다.

 

... 보안상의 이유로 권장되지 않으나.. 그래도 한번 해보자는 생각으로 진행하였는데
RDS에서는 2번을 설정을 변경을 해줬지만 똑같은 에러가 돌아왔습니다.

Window에서 사용하는 MySQL을 접속하여 사용하였더니, 거짓말처럼 되더군요.
아무래도 RDS는 3번 방안을 사용해서 진행을 해야하는 것이 아닐까..

저는 대체 방안으로 "Trigger" 를 사용하지 않고 코드단에서 스케줄러로 해결하였습니다..

'Database > MySQL' 카테고리의 다른 글

MySQL 1044 Error  (0) 2023.04.21
MySQL 1251 Error  (0) 2023.04.19

1. 공유기 포트 포워딩

공유기에 설정된 192.168.% 으로 시작하는 ip에 접속하여 포트포워딩.

서비스 포트에 외부에서 연결 시, 사용할 포트 
내부 IP 주소 : cmd -> ipconfig 해서 나오는 ip와 사용하고싶은 프로그램 포트.
   ex)  사용하고 싶은 프로그램 포트 : cmd netstat 를 통해 mysql을 사용하고 싶은 경우 3306 포트를 작성.

 

2. Window 10 에서 방화벽 인바운드 규칙 설정하기.

 - 윈도우 > 검색 : 방화벽 > 고급 설정 

 

 - 인바운드 규칙에서 사용할 프로그램 위치에서 exe 파일 설정.

추가) 위의 경우 내부망(사설 IP)에서만 접근 가능합니다!

 

3. Mysql 에서 권한주기.

1. root 계정으로 접속하기
   1) Terminal 로 mysql -u -p 로 접속하기
   2) MySQL Workbench 로 접속하기

2. 2)를 선택하여 진행하는 경우,
   1) CREATE USER 'TEST'@'localhost' IDENTIFIED BY '1234' ;
      CREATE USER '<유저명>'@'<유저IP>' IDENTIFIED BY '<비밀번호>';
   
     => 유저 생성하기.

   2) GRANT all privileges on *.* to 'TEST'@'localhost' identified by '1234';
      GRANT all privileges on <데이터베이스명>.* to '<유저명>'@'<유저IP>' identified by '<비밀번호>'

     => 유저IP에 해당하는 유저명 접근 허용 설정

   3) flush privileges;
     
     => 현재 사용중인 MySQL의 캐시를 지우고 새로운 설정을 적용하기 위해서 사용되는 명령어 


AWS 프리티어로 내부에 DB를 달고 진행 중, 관리를 하지 않아 비용이 많이 청구된 것을 확인한 뒤... AWS 프리티어만을 고집하기 보단.. 내 컴퓨터에서 DB를 저장하고 싶은 생각이 들어서 설정하다가 정리하게 되었습니다.

 

GRANT는 실무에서 사용하지 않는 경우가 많다고 합니다. 보안상의 문제로.. 시간이 되면 더 자세하게 찾아서 정리해보죠.

상황 

MySQL1044 Error

"Access denied for user 'root'@'%' to database 'logintest'
Local에서 작업을 한 뒤에 AWS EC2로 인스턴스를 만들어 옮기는 작업 중에 API를 실행하는 중에 에러가 발생하였습니다.

이유

"DB에 접속 권한이 없다" 라는 이유 때문에 에러가 발생한 것입니다.

해결

grant all privileges on [데이터베이스명.테이블명] to [사용자@호스트] identified by '패스워드';

FLUSH PRIVILEGES;

를 통해서 접속 권한 설정 후 해결 

상황 
분명히 집에서 개발을 하는 경우에는 연결이 되는 것을 확인하였습니다. 하지만 근처 카페에 가서 개발을 하려는 도중 에러가 발생하였습니다.

- MongoDB Error

ERROR MongooseServerSelectionError: Could not connect to any servers in your MongoDB Atlas cluster. One common reason is that you're trying to access the database from an IP that isn't whitelisted. Make sure your current IP address is on your Atlas cluster's IP whitelist: https://docs.atlas.mongodb.com/security-whitelist/

이유
집에서의 IP와 카페의 IP가 달라서 발생한 에러

해결 

cloud.mongodb.com 에 접속하여 SECURITY/ Database Access 현재 IP주소를 설정해주면 해결

상황 

MySQL 1251 Error

My Code

app.use(express.json());
const connection = mysql.createConnection({ dbconfig });
connection.query('SELECT * from User', (error, rows, fields) => {
    if (error) throw error;
    console.log('User info is: ', rows);
});
app.listen(PORT, () => {
    console.log(`The Server is Listening at ${PORT}`);
});

Error Code

Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client
    at Handshake.Sequence._packetToError (/Users/pjh/Desktop/chatandsns/node_modules/mysql/lib/protocol/sequences/Sequence.js:47:14)
    at Handshake.ErrorPacket (/Users/pjh/Desktop/chatandsns/node_modules/mysql/lib/protocol/sequences/Handshake.js:123:18)
    at Protocol._parsePacket (/Users/pjh/Desktop/chatandsns/node_modules/mysql/lib/protocol/Protocol.js:291:23)
    at Parser._parsePacket (/Users/pjh/Desktop/chatandsns/node_modules/mysql/lib/protocol/Parser.js:433:10)
    at Parser.write (/Users/pjh/Desktop/chatandsns/node_modules/mysql/lib/protocol/Parser.js:43:10)
    at Protocol.write (/Users/pjh/Desktop/chatandsns/node_modules/mysql/lib/protocol/Protocol.js:38:16)
    at Socket.<anonymous> (/Users/pjh/Desktop/chatandsns/node_modules/mysql/lib/Connection.js:88:28)
    at Socket.<anonymous> (/Users/pjh/Desktop/chatandsns/node_modules/mysql/lib/Connection.js:526:10)
    at Socket.emit (node:events:527:28)
    at addChunk (node:internal/streams/readable:315:12)
    --------------------
    at Protocol._enqueue (/Users/pjh/Desktop/chatandsns/node_modules/mysql/lib/protocol/Protocol.js:144:48)
    at Protocol.handshake (/Users/pjh/Desktop/chatandsns/node_modules/mysql/lib/protocol/Protocol.js:51:23)
    at Connection.connect (/Users/pjh/Desktop/chatandsns/node_modules/mysql/lib/Connection.js:116:18)
    at Connection._implyConnect (/Users/pjh/Desktop/chatandsns/node_modules/mysql/lib/Connection.js:454:10)
    at Connection.query (/Users/pjh/Desktop/chatandsns/node_modules/mysql/lib/Connection.js:196:8)
    at Object.<anonymous> (/Users/pjh/Desktop/chatandsns/src/server.js:9:12)
    at Module._compile (node:internal/modules/cjs/loader:1105:14)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1159:10)
    at Module.load (node:internal/modules/cjs/loader:981:32)
    at Function.Module._load (node:internal/modules/cjs/loader:822:12) {
  code: 'ER_NOT_SUPPORTED_AUTH_MODE',
  errno: 1251,
  sqlMessage: 'Client does not support authentication protocol requested by server; consider upgrading MySQL client',
  sqlState: '08004',
  fatal: true
}

 

 

 

이유

mysql에서 외부 접속을 허용해 주지 않고 연결을 하였기 때문에 오류가 발생하였습니다! 

 

해결 

외부 접속 허용 확인

: mysql> select host, user from mysql.user;

위의 명령어를 통해 외부 접속이 허용이 되어 있는지 확인하기!

만약 host에 localhost 이외의 주소가 없다면 외부 접속 허용이 불가능합니다.

서버와 같은 외부에서 허용하도록 하기 위해서는 host주소를 %로 지정해주면 된다.

mysql> CREATE USER '<userid>'@'%' IDENTIFIED BY 'root';

 MySQL 데이타베이스와 계정 생성하기.

mysql> GRANT ALL PRIVILEGES ON *.* TO '<userid>'@'%' WITH GRANT OPTION;

모든 db 및 테이블에 권한을 주고 로컬 및 리모트에서도 접속가능하도록 설정

mysql> FLUSH PRIVILEGES;

설정한 권한 적용 (반드시 해야 적용이 된다.)

mysql> select host, user from mysql.user;

⇒ 제대로 잘 설정 되었는지 확인.

비밀번호 플러그인 확인

: MySQL 8.0에서는 MySQL 패스워드 플러그인 “caching_sha2_password” 때문에 클라이언트 프로그램에서 에러가 발생한다.

mysql> select host, user, plugin, authentication_string from mysql.user;

 데이터베이스의 패스워드 플러그인 확인하기.

mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';

 플러그인을 “mysql_native_password” 플러그인으로 바꿔주기

 

참고 블로그 : [MySQL 8.0] nestjs 연동시 에러 해결 ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client

+ Recent posts