MySQL을 처음 설치하고나서 MySQL 서버에 연결하면 다음과 같은 오류가 발생합니다.
$ mysql -u [사용자] -p
Enter password:
> ERROR 1045 (28000): Access denied for user '사용자'@'호스트' (using password: YES)
사용자 계정 또는 비밀번호를 잘못 입력했을 때 발생할 수 있는 오류이지만, 다시 입력해봐도 똑같은 오류가 반복됩니다. MySQL을 처음 접하는 사용자가 유저 권한에 대한 이해가 바탕이 되어있지 않을 때 마주칠 수 밖에 없는 오류입니다.
사용자 권한
MySQL은 각 사용자 계정에 대해서 데이터베이스 및 테이블에 대한 접근 권한을 부여합니다. 또한 Select, Insert, Update, Delete, Create 등에 대한 쿼리 권한도 지정할 수 있습니다. 사용자 계정은 mysql 데이터베이스에서 user 테이블에 저장 및 관리됩니다.
MariaDB [(none)]> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MariaDB [mysql]> desc user;
+------------------------+---------------------+------+-----+----------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+---------------------+------+-----+----------+-------+
| Host | char(255) | NO | | | |
| User | char(128) | NO | | | |
| Password | longtext | YES | | NULL | |
| Select_priv | varchar(1) | YES | | NULL | |
| Insert_priv | varchar(1) | YES | | NULL | |
| Update_priv | varchar(1) | YES | | NULL | |
| Delete_priv | varchar(1) | YES | | NULL | |
| Create_priv | varchar(1) | YES | | NULL | |
(... 중략 ...)
+------------------------+---------------------+------+-----+----------+-------+
사용자 권한 부여
서비스 환경에 따라서 다양한 권한을 부여할 수 있지만 이번 포스트에서는 "ERROR 1045 (28000): Access denied for user" 오류를 해결하기 위한 방법을 제시합니다.
우선 MySQL이 설치된 로컬 호스트에서 MySQL 서버에 연결합니다. 이때 연결할 수 있는 계정은 루트 사용자(root)입니다.
$ mysql -u root
설치 과정에서 MySQL 환경 설정에서 루트 사용자의 비밀번호를 수정하였다면 다음과 같이 연결합니다.
$ mysql -u root -p
MySQL 서버에 연결되면 mysql 데이터베이스를 선택합니다.
MariaDB [(none)]> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
그다음 원하는 사용자 계정에게 모든 권한을 부여합니다.
MariaDB [mysql]> grant all privileges on *.* to '사용자'@'호스트' identified by '비밀번호';
Query OK, 0 rows affected (0.028 sec)
로컬 호스트에 대한 접속을 허용하려면 호스트에 루프백 주소를 입력해야 합니다.
- localhost
- 127.0.0.1
만약 모든 로컬 및 원격 주소를 통해 접속을 허용하려면 호스트에 다음(%)과 같이 입력합니다.
MariaDB [mysql]> grant all privileges on *.* to '사용자'@'%' identified by '비밀번호';
Query OK, 0 rows affected (0.028 sec)
사용자 권한을 수정했다면 반드시 flush privileges;를 실행하여 변경 사항을 적용합니다.
MariaDB [mysql]> flush privileges;
Query OK, 0 rows affected (0.001 sec)