웹사이트 검색

MySQL에서 새 사용자를 만들고 권한을 부여하는 방법


소개

세계에서 가장 인기 있는 오픈 소스 데이터베이스.

이 가이드는 새로운 MySQL 사용자를 생성하고 다양한 작업을 수행하는 데 필요한 권한을 부여하는 방법을 설명합니다.

전제 조건

이 가이드를 따르려면 MySQL 데이터베이스에 액세스해야 합니다. 이 가이드는 이 데이터베이스가 Ubuntu 20.04를 실행하는 가상 사설 서버에 설치되어 있다고 가정하지만, 여기에서 설명하는 원칙은 데이터베이스에 액세스하는 방법에 관계없이 적용 가능해야 합니다.

MySQL 데이터베이스에 대한 액세스 권한이 없고 직접 설정하려는 경우 MySQL 설치 방법에 대한 가이드 중 하나를 따를 수 있습니다. 다시 말하지만 서버의 기본 운영 체제에 관계없이 새 MySQL 사용자를 생성하고 권한을 부여하는 방법은 일반적으로 동일합니다.

또는 클라우드 공급자가 관리하는 MySQL 데이터베이스를 가동할 수 있습니다. DigitalOcean Managed Database를 가동하는 방법에 대한 자세한 내용은 제품 설명서를 참조하십시오.

변경하거나 사용자 지정해야 하는 예제 명령 부분은 이 가이드 전체에서 이와 같이 강조 표시됩니다.

새 사용자 만들기

설치 시 MySQL은 데이터베이스를 관리하는 데 사용할 수 있는 루트 사용자 계정을 생성합니다. 이 사용자는 MySQL 서버에 대한 전체 권한을 가집니다. 즉, 모든 데이터베이스, 테이블, 사용자 등을 완전히 제어할 수 있습니다. 이 때문에 관리 기능 외부에서 이 계정을 사용하지 않는 것이 가장 좋습니다. 이 단계에서는 루트 MySQL 사용자를 사용하여 새 사용자 계정을 만들고 권한을 부여하는 방법을 설명합니다.

MySQL 5.7(및 이후 버전)을 실행하는 Ubuntu 시스템에서 루트 MySQL 사용자는 기본적으로 비밀번호가 아닌 auth_socket 플러그인을 사용하여 인증하도록 설정됩니다. 이 플러그인을 사용하려면 MySQL 클라이언트를 호출하는 운영 체제 사용자의 이름이 명령에 지정된 MySQL 사용자의 이름과 일치해야 합니다. 이것은 루트 MySQL 사용자에 대한 액세스 권한을 얻기 위해 루트 Ubuntu 사용자의 권한으로 명령을 호출하기 위해 mysql 명령 앞에 sudo를 붙여야 함을 의미합니다.

  1. sudo mysql

참고: 루트 MySQL 사용자가 암호로 인증하도록 구성된 경우 MySQL 셸에 액세스하려면 다른 명령을 사용해야 합니다. 다음은 일반 사용자 권한으로 MySQL 클라이언트를 실행하며 올바른 암호로 인증해야만 데이터베이스 내에서 관리자 권한을 얻을 수 있습니다.

  1. mysql -u root -p

MySQL 프롬프트에 액세스할 수 있으면 CREATE USER 문을 사용하여 새 사용자를 만들 수 있습니다. 이들은 다음 일반 구문을 따릅니다.

  1. CREATE USER 'username'@'host' IDENTIFIED WITH authentication_plugin BY 'password';

CREATE USER 다음에 사용자 이름을 지정합니다. 바로 다음에는 @ 기호와 이 사용자가 연결할 호스트 이름이 옵니다. Ubuntu 서버에서 로컬로만 이 사용자에 액세스하려는 경우 localhost를 지정할 수 있습니다. 사용자 이름과 호스트를 모두 작은따옴표로 묶을 필요는 없지만 이렇게 하면 오류를 방지하는 데 도움이 됩니다.

사용자의 인증 플러그인을 선택할 때 몇 가지 옵션이 있습니다. 앞에서 언급한 auth_socket 플러그인은 유효한 사용자가 데이터베이스에 액세스하기 위해 암호를 입력하지 않고도 강력한 보안을 제공하므로 편리할 수 있습니다. 그러나 외부 프로그램이 MySQL과 상호 작용해야 할 때 상황을 복잡하게 만들 수 있는 원격 연결도 방지합니다.

대안으로 사용자가 MySQL의 기본 플러그인인 caching_sha2_password로 인증하도록 구문의 WITH authentication_plugin 부분을 완전히 생략할 수 있습니다. MySQL 설명서는 강력한 보안 기능으로 인해 암호로 로그인하려는 사용자에게 이 플러그인을 권장합니다.

다음 명령을 실행하여 caching_sha2_password로 인증하는 사용자를 생성합니다. sammy를 원하는 사용자 이름으로 변경하고 password를 원하는 강력한 비밀번호로 변경하세요.

  1. CREATE USER 'sammy'@'localhost' IDENTIFIED BY 'password';

참고: 일부 버전의 PHP에는 caching_sha2_password에 문제를 일으키는 알려진 문제가 있습니다. 이 데이터베이스를 PHP 응용 프로그램(예: phpMyAdmin)과 함께 사용하려는 경우 이전 버전의 mysql_native_password 플러그인을 대신 사용하여 인증하는 사용자를 생성할 수 있습니다.

  1. CREATE USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

확실하지 않은 경우 caching_sha2_plugin으로 인증하는 사용자를 생성한 다음 나중에 이 명령을 사용하여 ALTER할 수 있습니다.

  1. ALTER USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

새 사용자를 생성한 후 적절한 권한을 부여할 수 있습니다.

사용자 권한 부여

사용자 권한을 부여하는 일반적인 구문은 다음과 같습니다.

  1. GRANT PRIVILEGE ON database.table TO 'username'@'host';

이 예제 구문의 PRIVILEGE 값은 지정된 데이터베이스테이블. 각 권한을 쉼표로 구분하여 하나의 명령으로 동일한 사용자에게 여러 권한을 부여할 수 있습니다. 데이터베이스 및 테이블 이름 대신 별표(*)를 입력하여 전역적으로 사용자 권한을 부여할 수도 있습니다. SQL에서 별표는 "모든\ 데이터베이스 또는 테이블을 나타내는 데 사용되는 특수 문자입니다.

예를 들어, 다음 명령은 사용자에게 CREATE, ALTERDROP 데이터베이스, 테이블 및 사용자에 대한 전역 권한을 부여합니다. 서버의 모든 테이블에서 데이터를 INSERT, UPDATEDELETE할 수 있습니다. 또한 SELECT로 데이터를 쿼리하고, REFERENCES 키워드로 외래 키를 만들고, FLUSH 작업을 수행할 수 있는 기능을 사용자에게 부여합니다. >RELOAD 권한. 그러나 사용자에게 필요한 권한만 부여해야 하므로 필요에 따라 자신의 사용자 권한을 자유롭게 조정하십시오.

공식 MySQL 문서에서 사용 가능한 권한의 전체 목록을 찾을 수 있습니다.

GRANT 문을 실행하여 sammy를 자신의 MySQL 사용자 이름으로 대체하여 사용자에게 이러한 권한을 부여합니다.

  1. GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD on *.* TO 'sammy'@'localhost' WITH GRANT OPTION;

이 문에는 WITH GRANT OPTION도 포함되어 있습니다. 이렇게 하면 MySQL 사용자가 시스템의 다른 사용자에게 가지고 있는 모든 권한을 부여할 수 있습니다.

경고: 일부 사용자는 MySQL 사용자에게 다음과 같이 루트 사용자의 권한과 유사한 광범위한 수퍼유저 권한을 제공하는 ALL PRIVILEGES 권한을 부여하고자 할 수 있습니다.

  1. GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;

MySQL 사용자에 대한 액세스 권한이 있는 사람은 누구나 서버의 모든 데이터베이스를 완전히 제어할 수 있으므로 이러한 광범위한 권한을 가볍게 부여해서는 안 됩니다.

많은 가이드에서는 CREATE USER 또는 GRANT 문 직후에 FLUSH PRIVILEGES 명령을 실행하여 권한 부여 테이블을 다시 로드하여 새 권한을 보장하도록 제안합니다. 적용됩니다:

  1. FLUSH PRIVILEGES;

그러나 공식 MySQL 문서에 따르면 GRANT와 같은 계정 관리 문을 사용하여 부여 테이블을 간접적으로 수정하면 데이터베이스는 즉시 부여 테이블을 메모리에 다시 로드합니다. 즉, FLUSH PRIVILEGES 명령은 우리의 경우 필요하지 않습니다. 반면에 실행해도 시스템에 부정적인 영향을 미치지 않습니다.

권한을 취소해야 하는 경우 구조는 권한 부여와 거의 동일합니다.

  1. REVOKE type_of_permission ON database_name.table_name FROM 'username'@'host';

권한을 취소할 때 구문에서 권한을 부여할 때 사용한 TO 대신 FROM을 사용해야 합니다.

SHOW GRANTS 명령을 실행하여 사용자의 현재 권한을 검토할 수 있습니다.

  1. SHOW GRANTS FOR 'username'@'host';

DROP으로 데이터베이스를 삭제할 수 있는 것처럼 DROP을 사용하여 사용자를 삭제할 수 있습니다.

  1. DROP USER 'username'@'localhost';

MySQL 사용자를 생성하고 권한을 부여한 후 MySQL 클라이언트를 종료할 수 있습니다.

  1. exit

앞으로 새 MySQL 사용자로 로그인하려면 다음과 같은 명령을 사용합니다.

  1. mysql -u sammy -p

-p 플래그는 MySQL 클라이언트가 인증을 위해 MySQL 사용자의 암호를 묻는 메시지를 표시하도록 합니다.

결론

이 자습서를 따라 새 사용자를 추가하고 MySQL 데이터베이스에서 다양한 권한을 부여하는 방법을 배웠습니다. 여기에서 계속해서 MySQL 사용자에 대한 다양한 권한 설정을 탐색하고 실험할 수 있습니다. 또는 더 높은 수준의 MySQL 구성에 대해 자세히 알아볼 수도 있습니다.

MySQL의 기본 사항에 대한 자세한 내용은 다음 자습서를 참조하십시오.

  • 클라우드 서버의 MySQL 및 MariaDB에서 데이터베이스를 만들고 관리하는 방법
  • MySQL에서 복제를 설정하는 방법
  • Ubuntu 20.04에서 MySQL 그룹 복제를 구성하는 방법