[MariaDB] ERROR 1698 (28000): Access denied for user 'root'@'localhost'
맥북에 MariaDB 설치 다시 설치하다 생긴 이슈이다. MariaDB 10.5 이상부터 변경 된거 같다. 해당 포스팅에는 MariaDB 10.4 이전 해결 방안도 작성.
에러
root 계정, 일반계정으로 mysql 접속을 못한는 경우이다.
linked2ev@linked2ev-MacBook-Pro etc % mysql -uroot
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
또는 MariaDB 10.5 이상이면 아래와 같은 오류 발생시
ERROR 1356 (HY000): View 'mysql.user' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
원인
계정에 대해 비밀번호 적용 방식과 비밀번호 할당시 오류이다. mysql.user가 뷰테이블로 MariaDB 10.5 이상부터 변경 된거 같다.
MariaDB 10.4 이하 해결(비밀번호 방식)
아래와 같이 명령어로 해결 sudo 명령어로 mysql 를 접속한 후에 아래와 같이 비밀번호 방식을 바꾸면 된다.
$ sudo mysql -uroot
$ use mysql;
$ update user set plugin='mysql_native_password' where user='root';
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]> SELECT User, Host, Plugin FROM mysql.user;
+-------------+-----------------------+-----------------------+
| User | Host | plugin |
+-------------+-----------------------+-----------------------+
| mariadb.sys | localhost | mysql_native_password |
| root | localhost | auth_socket |
| linked2ev | localhost | mysql_native_password |
| | localhost | |
| | linked2ev-macbook-pro | |
+-------------+-----------------------+-----------------------+
5 rows in set (0.003 sec)
MariaDB [mysql]> update user set plugin='mysql_native_password' where user='root';
다시 접속
$ mysql -uroot -p
MariaDB 10.5 이상 해결(비밀번호 할당)
아래와 같이 에러 메시지가 발생 시에 MariaDB 10.5 이상부터 mysql.user 테이블은 뷰테이블로 아래와 같이 Use SET PASSWORD 또는 ALTER USER방식으로 비밀번호를 할당해줘야 한다.
MariaDB [mysql]> update user set plugin='mysql_native_password' where user='root';
ERROR 1356 (HY000): View 'mysql.user' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
[참고] - https://stackoverflow.com/questions/64841185/error-1356-hy000-view-mysql-user-references-invalid-tables-or-columns-o
아래와 같이 명령어로 해결 sudo 명령어로 mysql 를 접속한 후에 아래와 같이 비밀번호을 할당해준다.
$ sudo mysql -uroot
$ use mysql;
MariaDB [mysql]> set password for root@'localhost' = PASSWORD('1111');
Query OK, 0 rows affected (0.008 sec)
OR
MariaDB [mysql]> ALTER USER root@localhost IDENTIFIED BY '1111';
Query OK, 0 rows affected (0.009 sec)
다시 mysql 접속을 시도해보면 “$ mysql -uroot” 비밀번호를 물어보며 “mysql -uroot -p” 로 정상적으로 로그인을 하는걸 볼 수 있다.
linked2ev@linked2ev-MacBook-Pro etc % mysql -uroot
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
linked2ev@linked2ev-MacBook-Pro etc % mysql -uroot -p
Enter password:
Use SET PASSWORD
SET PASSWORD 문은 기존 MariaDB 사용자 계정에 암호를 할당한다.
구문
SET PASSWORD [FOR user] =
{
PASSWORD('some password')
| OLD_PASSWORD('some password')
| 'encrypted password'
}
예제
SET PASSWORD FOR 'bob'@localhost = PASSWORD('1111');
ALTER USER .. IDENTIFIED BY
IDENTIFIED BY절을 사용하여 계정에 암호를 할당한다. 암호는 일반 텍스트로 지정.
구문
ALTER USER [IF EXISTS]
user_specification [,user_specification] ...
[REQUIRE {NONE | tls_option [[AND] tls_option] ...}]
[WITH resource_option [resource_option] ...]
[lock_option] [password_option]
예제
ALTER USER foo2@test IDENTIFIED BY '1111';
- https://stackoverflow.com/questions/64841185/error-1356-hy000-view-mysql-user-references-invalid-tables-or-columns-o
- https://mariadb.com/kb/en/set-password/
- https://mariadb.com/kb/en/alter-user/





