2.10.2 MySQL 슈퍼 계정 보안 설정
MySQL 설치 과정의 일환으로 부여 테이블을 포함 mysql
데이터베이스를 설정합니다.
Windows 배포는 사전에 초기화 된 부여 테이블을 포함합니다.
Unix에서는 mysql_install_db 프로그램이 부여 테이블에 채 웁니다. 일부 설치 방법은이 프로그램이 자동으로 실행됩니다. 그 외에 수동으로 실행해야합니다. 자세한 내용은 섹션 2.10.1 "Unix 유사 시스템에서 설치 후 절차" 를 참조하십시오.
mysql.user
부여 테이블은 초기 MySQL 사용자 계정 및 액세스 권한을 정의합니다.
일부 계정은 사용자 이름이
root
입니다. 이들은 모든 권한을 가지며 어떤 수 슈퍼 사용자 계정입니다.root
계정의 초기 암호는 비어 있습니다. 따라서 누군가 암호없이root
로 MySQL Server에 연결하여 모든 권한을 부여 할 수 있습니다.Windows에서는 로컬 호스트로부터의 접속 만 허용
root
계정이 생성됩니다. 호스트 이름localhost
IP 주소127.0.0.1
또는 IPv6 주소::1
을 지정하여 연결할 수 있습니다. 사용자가 설치 중에 "Enable root access from remote machines"옵션을 선택한 경우 Windows Installer는에 짐을 호스트로부터의 접속을 허용하는 다른root
계정을 만듭니다.Unix에서는 각
root
계정은 로컬 호스트로부터의 접속을 허용합니다. 호스트 이름localhost
IP 주소127.0.0.1
또는 IPv6 주소::1
또는 실제 호스트 이름 또는 IP 주소를 지정하여 연결할 수 있습니다.
호스트
127.0.0.1
로 접속을 시도하면 보통localhost
계정에 해결합니다. 그러나 서버가--skip-name-resolve
옵션을 사용하여 실행되는 경우,이 실패합니다. 따라서이 경우에는127.0.0.1
계정이 편리합니다.::1
계정은 IPv6 연결에 사용됩니다.일부 계정은 익명 사용자 용입니다. 이들은 하늘의 사용자 이름을가집니다. 익명의 계정에 암호가 없기 때문에 누군가 그 계정을 사용하여 MySQL 서버에 연결할 수 있습니다.
Windows에서는 로컬 호스트로부터의 접속을 허용 익명 계정이 하나 있습니다.
localhost
의 호스트 이름을 지정하여 연결할 수 있습니다.Unix에서는 각 익명 계정은 로컬 호스트로부터의 접속을 허용합니다. 계정 중 하나의 호스트 이름
localhost
를 지정하거나 다른 계정의 실제 호스트 이름 또는 IP 주소를 지정하여 연결할 수 있습니다.
mysql.user
테이블에 어떤 계정이 존재하는지, 그 암호가 비어 있는지 여부를 표시하려면 다음 문을 사용합니다.
mysql> SELECT User, Host, Password FROM mysql.user;
+------+--------------------+----------+
| User | Host | Password |
+------+--------------------+----------+
| root | localhost | |
| root | myhost.example.com | |
| root | 127.0.0.1 | |
| root | ::1 | |
| | localhost | |
| | myhost.example.com | |
+------+--------------------+----------+
이 출력은 몇 가지 root
계정과 익명 사용자 계정이 있고, 어느 것에도 암호가 없음을 보여줍니다. 사용하는 시스템에서는 출력이 다를 수 있지만 빈 암호 계정이 존재한다는 것은 어떤 대처를 할 때까지 MySQL 설치가 보호되지 않는다는 것을 의미합니다.
각각의 MySQL
root
계정에 암호를 지정해야합니다.클라이언트가 익명 사용자로 패스워드없이 접속하는 것을 방지하기 위해 각 익명 계정에 패스워드를 할당하거나 해당 계정을 삭제하면 좋을 것입니다.
또한 mysql.db
테이블에는 모든 계정이 test
데이터베이스 및 test_
로 시작하는 이름을 가진 다른 데이터베이스에 액세스하는 것을 허용하는 행이 포함됩니다. 이것은 기본 익명 계정처럼, 그렇지 않으면 특별한 권한이없는 계정에 적용됩니다. 이 테스트에는 유용하지만 프로덕션 서버에서는 권장되지 않습니다. 데이터베이스에 대한 액세스를 그 목적으로 명시 적으로 권한을 부여 된 계정에만 제한하려면 관리자가 mysql.db
테이블의 해당 행을 삭제하면 좋을 것입니다.
다음 단계에서는 초기 MySQL 계정에 암호를 설정하는 방법을 먼저 root
계정 다음 익명 계정의 순으로 설명합니다. 이 단계에서는 익명 액세스를 전혀 허용하지 않는 경우 익명 계정을 삭제하는 방법에 대해서도 언급 데이터베이스를 테스트하기위한 관대 한 액세스를 제거하는 방법도 설명합니다. 예제의 newpwd
사용하는 암호로 대체하십시오. host_name
은 서버의 호스트 이름으로 대체합니다. 이 이름은 위의 SELECT
문의 출력에서 확인할 수 있습니다. 표시된 출력은 host_name
은 myhost.example.com
입니다.
비밀번호 자세한 내용은 섹션 6.3.5 "계정 암호 할당" 을 참조하십시오. root
암호를 설정 한 후에 그것을 잊어 버린 경우, 섹션 B.5.4.1 "root 암호를 재설정하는 방법" 을 참조하십시오.
추가 설치 및 테스트를 실행하는 동안 암호를 지정해야 피하기 위해 암호 설정을 늦추고 싶은 경우가 있습니다. 그러나 설치를 생산 용으로 사용하기 전에 그들을 잊지 않고 설정하십시오.
추가 계정을 설정하려면 섹션 6.3.2 "사용자 계정 추가" 를 참조하십시오.
root 계정의 암호 지정
root
계정의 비밀번호는 여러 가지 방법으로 설정할 수 있습니다. 다음의 설명에서는 세 가지 방법을 보여줍니다.
SET PASSWORD
문을 사용하여UPDATE
문을 사용하여mysqladmin 명령 행 클라이언트 프로그램을 사용하는
SET PASSWORD
를 사용하여 암호를 할당하려면 서버에 root
로 연결하고 SET PASSWORD
문을 mysql.user
테이블에 나열되어있는 각 root
계정에 게시합니다. PASSWORD()
함수를 사용하여 암호를 잊지 않고 암호화합니다.
Windows에서는 다음과 같이합니다.
shell>mysql -u root
mysql>SET PASSWORD FOR 'root'@'localhost' = PASSWORD(' newpwd ');
mysql>SET PASSWORD FOR 'root'@'127.0.0.1' = PASSWORD(' newpwd ');
mysql>SET PASSWORD FOR 'root'@'::1' = PASSWORD(' newpwd ');
mysql>SET PASSWORD FOR 'root'@'%' = PASSWORD(' newpwd ');
mysql.user
테이블에 호스트 값이 %
인 root
계정이없는 경우는 마지막 문장은 필요하지 않습니다.
Unix에서는 다음과 같이합니다.
shell>mysql -u root
mysql>SET PASSWORD FOR 'root'@'localhost' = PASSWORD(' newpwd ');
mysql>SET PASSWORD FOR 'root'@'127.0.0.1' = PASSWORD(' newpwd ');
mysql>SET PASSWORD FOR 'root'@'::1' = PASSWORD(' newpwd ');
mysql>SET PASSWORD FOR 'root'@' host_name ' = PASSWORD(' newpwd ');
UPDATE
를 사용하여 mysql.user
테이블을 직접 수정하여 모든 root
계정에 암호를 할당 단일 문을 사용할 수 있습니다. 이 방법은 모든 플랫폼에서 작동합니다.
shell>mysql -u root
mysql>UPDATE mysql.user SET Password = PASSWORD(' newpwd ')
->WHERE User = 'root';
mysql>FLUSH PRIVILEGES;
FLUSH
문은 서버가 부여 테이블을 다시 읽습니다. 그것이 없으면 암호 변경은 서버를 다시 시작할 때까지 서버에 인식되지 않습니다.
비밀번호를 root
계정에 mysqladmin을 사용하여 할당하려면 다음 명령을 실행합니다.
shell>mysqladmin -u root password " newpwd "
shell>mysqladmin -u root -h host_name password " newpwd "
이 명령은 Windows 및 Unix 모두에 해당합니다. 비밀번호를 둘러싼 큰 따옴표는 반드시 항상 필요한 것은 아니지만, 암호에 공백 다른 명령 인터프리터에게 특수 문자가 포함 된 경우 사용한다.
mysqladmin을 사용하여 root
계정의 비밀번호를 설정하는 방법은 'root'@'127.0.0.1'
or 'root'@'::1'
계정에서는 작동하지 않습니다. 위의 SET PASSWORD
를 사용합니다.
root
설정 후에는 root
로 서버에 연결할 때마다 해당 암호를 제공해야합니다. 예를 들어, mysqladmin에서 서버를 종료하려면 다음 명령을 사용합니다.
shell>mysqladmin -u root -p shutdown
Enter password :(enter root password here)
익명 계정의 암호 지정
다음 단계 mysql 명령은 이전 단계를 사용하여 root
암호를 설정하고 서버에 연결할 때 암호를 지정해야한다는 것을 전제로 -p
옵션을 포함합니다.
익명 계정에 암호를 할당하려면 서버에 root
로 접속 한 후 SET PASSWORD
또는 UPDATE
를 사용합니다. PASSWORD()
함수를 사용하여 암호를 잊지 않고 암호화합니다.
Windows에서 SET PASSWORD
를 사용하려면 다음과 같이합니다.
shell>mysql -u root -p
Enter password :(enter root password here)
mysql>SET PASSWORD FOR ''@'localhost' = PASSWORD(' newpwd ');
Unix에서 SET PASSWORD
를 사용하려면 다음과 같이합니다.
shell>mysql -u root -p
Enter password :(enter root password here)
mysql>SET PASSWORD FOR ''@'localhost' = PASSWORD(' newpwd ');
mysql>SET PASSWORD FOR ''@' host_name ' = PASSWORD(' newpwd ');
단일 UPDATE
문에서 익명 사용자 계정의 암호를 설정하려면 다음과 같이합니다 (모든 플랫폼에서).
shell>mysql -u root -p
Enter password :(enter root password here)
mysql>UPDATE mysql.user SET Password = PASSWORD(' newpwd ')
->WHERE User = '';
mysql>FLUSH PRIVILEGES;
FLUSH
문은 서버가 부여 테이블을 다시 읽습니다. 그것이 없으면 암호 변경은 서버를 다시 시작할 때까지 서버에 인식되지 않습니다.
익명 계정 삭제
익명 계정에 암호를 지정하지 않고 제거 할 경우 Windows에서는 다음과 같이합니다.
shell>mysql -u root -p
Enter password :(enter root password here)
mysql>DROP USER ''@'localhost';
Unix에서는 다음과 같이 익명 계정을 삭제합니다.
shell>mysql -u root -p
Enter password :(enter root password here)
mysql>DROP USER ''@'localhost';
mysql>DROP USER ''@' host_name ';
테스트 데이터베이스의 보안 설정
기본적으로 mysql.db
테이블에는 모든 사용자가 test
데이터베이스 및 test_
로 시작하는 이름을 가진 다른 데이터베이스에 대한 액세스를 허용하는 행이 포함됩니다. (이 라인은 빈 User
컬럼 값이 액세스 검사를 위해 임의의 사용자 이름과 일치합니다.) 이것은 그렇지 않으면 아무런 권한도없는 계정조차도 이러한 데이터베이스 를 사용할 수 있음을 의미합니다. 테스트 데이터베이스에 모든 사용자의 액세스를 제거하려면 다음과 같이합니다.
shell>mysql -u root -p
Enter password :(enter root password here)
mysql>DELETE FROM mysql.db WHERE Db LIKE 'test%';
mysql>FLUSH PRIVILEGES;
FLUSH
문은 서버가 부여 테이블을 다시 읽습니다. 그것이 없으면 권한의 변경은 서버를 다시 시작할 때까지 서버에 인식되지 않습니다.
전술의 변경으로 인해 글로벌 데이터베이스 권한 또는 test
데이터베이스에 명시 적으로 부여 된 권한을 가진 사용자 만이 그것을 사용할 수 있습니다. 그러나 데이터베이스가 전혀 필요하지 않은 경우 드롭합니다.
mysql> DROP DATABASE test;
Windows에서 MySQL Installer ( 섹션 2.3.3 "MySQL Installer를 사용하여 MySQL의 Microsoft Windows에 설치" 를 참조하십시오)에서 설치 중에이 섹션에 설명 된 단계를 수행 할 수 있습니다. 모든 플랫폼에서 MySQL 배포판에는 MySQL 설치를 보안하는 과정의 대부분을 자동화하는 명령 행 유틸리티 mysql_secure_installation가 포함되어 있습니다. 또한 MySQL Workbench는 모든 플랫폼에서 사용 가능하며, 사용자 계정 관리 기능을 제공합니다 ( 제 26 장 "MySQL Workbench" 를 참조하십시오).