MySQL - 사용자 및 권한

문한성·2023년 3월 20일
0

MySQL

목록 보기
1/5
post-thumbnail

사용자 식별

MySQL에서는 다음과 같은 방법으로 사용자를 식별합니다.

사용자 이름과 비밀번호 MySQL에 접근하려는 사용자는 사용자 이름과 비밀번호를 입력해야 합니다. 이것은 가장 기본적인 사용자 식별 방법입니다.

IP 주소 MySQL은 사용자가 접근한 IP 주소를 파악하여 사용자를 식별할 수 있습니다. 이것은 서버가 여러 사용자를 호스팅하고 있을 때 유용합니다.

호스트 이름 MySQL은 사용자가 접근한 호스트 이름을 파악하여 사용자를 식별할 수 있습니다. 이것은 IP 주소와 비슷하지만, 동일한 IP 주소에서 여러 호스트 이름으로 접근할 수 있습니다.

SSL 인증서 MySQL은 SSL 인증서를 사용하여 사용자를 식별할 수 있습니다. 이 방법은 고도의 보안이 필요한 경우에 유용합니다.

LDAP 인증 MySQL은 LDAP(Lightweight Directory Access Protocol) 인증을 사용하여 사용자를 식별할 수 있습니다. 이 방법은 대규모 조직에서 사용자를 관리할 때 유용합니다.

사용자를 식별할 때, 호스트 우선순위는 다음과 같습니다

  • 가장 높은 우선순위는 localhost로 지정된 호스트입니다. 이는 로컬 호스트(즉, MySQL이 설치된 서버 자체)에서 실행되는 클라이언트에 대한 연결을 나타냅니다.

  • 다음으로 높은 우선순위는 127.0.0.1로 지정된 호스트입니다. 이는 로컬 호스트에 대한 TCP/IP 연결을 나타냅니다.

  • 그 다음은 특정 IP 주소로 지정된 호스트입니다. 이는 클라이언트의 IP 주소가 지정된 호스트와 일치하는 경우 해당 클라이언트에 대한 연결을 나타냅니다.

  • 마지막으로, %로 지정된 호스트입니다. 이는 모든 호스트에 대한 연결을 나타냅니다. 이는 가장 낮은 우선순위를 가지며, 보안상의 이유로 권장되지 않습니다.

이러한 호스트 우선순위는 MySQL에서 사용자 계정을 생성할 때 지정될 수 있으며, 특정 사용자가 어떤 호스트에서 접속할 수 있는지 제한할 수 있습니다.

사용자 계정 관리

시스템 계정과 일반 계정
MySQL 시스템 계정은 MySQL 서버를 관리하고 제어하는 데 사용되는 계정입니다. 이 계정은 일반 사용자에 비해 더 많은 권한을 가지며, MySQL 데이터베이스에 대한 모든 작업을 수행할 수 있습니다. 시스템 계정은 MySQL 서버에 대한 전체 액세스 권한이 있으므로 주의해서 사용해야 합니다.

일반 계정은 MySQL 데이터베이스에 액세스하기 위해 만들어지는 계정입니다. 이 계정은 데이터베이스에서 특정 작업을 수행하기 위한 권한을 가질 수 있습니다. 일반 계정은 일반적으로 웹 애플리케이션 또는 다른 소프트웨어에서 데이터베이스에 액세스하기 위해 사용됩니다. 일반 계정은 시스템 계정과 달리 특정 작업을 수행할 수 있는 권한만 가지며, MySQL 서버 자체를 제어할 수 없습니다.

계정 생성과 권한

MySQL은 사용자가 구조화된 방식으로 데이터를 생성, 저장 및 관리할 수 있도록 하는 널리 사용되는 관계형 데이터베이스 관리 시스템입니다. MySQL 데이터베이스에 액세스하려면 사용자는 계정을 만들고 필요한 리소스에 액세스할 수 있는 권한을 부여해야 합니다. 이 답변에서는 몇 가지 예를 들어 MySQL 계정 생성 및 권한 부여와 관련된 단계를 설명합니다.

계정 생성
MySQL 계정을 만들려면 다음 단계를 따라야 합니다.

관리 계정을 사용하여 MySQL 서버에 로그인합니다.
다음 명령을 사용하여 새 사용자 계정을 만듭니다.

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

이 명령은 주어진 사용자 이름과 암호로 새 사용자 계정을 만들고 사용자가 로컬 호스트에서만 연결할 수 있도록 합니다.

다음 명령을 사용하여 사용자 계정에 권한을 부여합니다.

GRANT ALL PRIVILEGES ON * . * TO 'username'@'localhost';

이 명령은 모든 데이터베이스에 대한 모든 권한을 사용자 계정에 부여합니다.

권한 부여
MySQL 계정을 만든 후에는 필요한 리소스에 액세스할 수 있도록 권한을 부여해야 합니다. 권한 부여 프로세스에는 액세스해야 하는 리소스를 기반으로 사용자 계정에 권한을 부여하는 작업이 포함됩니다. 다음은 MySQL 사용자 계정에 권한을 부여하는 방법에 대한 몇 가지 예입니다.

특정 데이터베이스에 대한 SELECT 권한을 부여합니다.

GRANT SELECT ON database_name.* TO 'username'@'localhost';

이 명령은 지정된 데이터베이스의 모든 테이블에서 데이터를 선택할 수 있는 기능을 사용자 계정에 부여합니다.

특정 테이블에 대한 UPDATE 및 DELETE 권한 부여:

GRANT UPDATE, DELETE ON database_name.table_name TO 'username'@'localhost';

이 명령은 지정된 데이터베이스의 지정된 테이블에서 데이터를 업데이트하고 삭제할 수 있는 기능을 사용자 계정에 부여합니다.

저장 프로시저에 대한 EXECUTE 권한을 부여합니다.

GRANT EXECUTE ON PROCEDURE procedure_name TO 'username'@'localhost';

이 명령은 사용자 계정에 지정된 저장 프로시저를 실행할 수 있는 권한을 부여합니다.

MySQL 계정을 만들고 권한을 부여하려면 암호가 있는 새 사용자 계정을 만들고 액세스해야 하는 리소스에 따라 사용자 계정에 권한을 부여해야 합니다. 권한 부여 프로세스에는 액세스해야 하는 리소스를 기반으로 사용자 계정에 권한을 부여하는 작업이 포함되며 이는 사용자 계정의 특정 요구 사항에 따라 다양한 명령을 사용하여 수행할 수 있습니다.

고수준 비밀번호와 이중 비밀번호

MySQL은 전 세계 많은 조직에서 사용하는 인기 있는 오픈 소스 관계형 데이터베이스 관리 시스템입니다. MySQL 암호 관리는 데이터베이스 보안의 필수 요소입니다. MySQL에는 고급 암호와 이중 암호의 두 가지 유형의 암호 관리가 있습니다.

고수준 비밀번호
MYSQL서버의 비밀번호는 유효기간이나 이력 관리를 통한 재사용 금지 기능뿐만 아니라 비밀번호를 쉽게 유추할 수 있는 단어들이 사용되지 않게 글자의 조합을 강제하거나 금칙어를 설정하는 기능도 있다.

MySQL에서 비밀번호의 유효성 체크 규칙을 적용하려면 validate_password 컴포넌트를 이용해야 하는데 validate_password 컴포넌트를 설치해야 한다.

## validate_password 컴포넌트 설치
mysql> INSTALL COMPONENT 'file://component_validate_password';

##설치된 컴포넌트 확인
mysql> SELECT * FROM mysql.component;

컴포넌트가 설치되면 컴포넌트에서 제공하는 시스템 변수를 확인할 수 있다.
비밀번호 정책은 크게 다음 3가지 중에서 선택할 수 있으며 기본값은 MEDIUNM이다

  • LOW: 비밀번호의 길이만 검증
  • MEDIUM: 비밀번호의 길이를 검증하며, 숫자와 대소문자,그리고 특수문자의 배합을 검증
  • STRONG: MEDIUM레벨의 검증을 모두 수행하며, 금칙어가 포함됐는지 여부까지 검증

이중 비밀번호
데이터베이스 계정의 비밀번호는 서비스가 실행 중인 상태에서 변경이 불가했다.
지금까지는 서비스를 모두 멈추지 않고서는 비밀번호를 변경하는 것은 불가능한 일이였다.

이같은 문제점을 해결하기 위해 MySQL 8.0부터는 계정의 비밀번호로 2개의 값을 동시에 사용 할 수있는 기능을 추가했다.

## 비밀번호를 "yterq"로 설정
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'old_password';

## 비밀번호를 "qwerty"로 변경하면서 기존 비밀번호를 세컨더리 비밀번호로 설정
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password' RETAIN CURRENT PASSWORD;

이렇게 설정된 상태에서 데이터베이스에 연결하는 응용 프로그램의 소스코드나 설정 파일의 비밀번호를 새롱누 비밀번호인 new_password로 변경하고 배포 및 재시작을 순차적으로 시작한다.

profile
기록하고 공유하려고 노력하는 DevOps 엔지니어

0개의 댓글