테스트 환경에서는 다음을 통해 동일한 이름과 데이터베이스를 가진 사용자를 만들었습니다.
create user 'test'@'localhost' identified by 'blablabla';
create database test;
이런 방식으로 사용자를 데이터베이스와 연결하면(사용자에게 모든 권한도 부여됨):
grant all privileges on test.* to test;
다음 오류가 발생합니다.
오류 1133(42000): 사용자 테이블에 일치하는 행이 없습니다.
불일치가 무엇인지 이해하지 못합니다. 사용자와 데이터베이스가 모두 성공적으로 생성되었다는 단서가 show databases;
있으므로 이 오류가 발생하는 이유를 알 수 없습니다.SELECT user FROM mysql.user;
이 오류가 발생하는 이유는 무엇입니까?
Abhik Bose의 업데이트:
mysql> grant all privileges on test.* to 'test'@'localhost';
grant all privileges on test.* to 'test'@'localhost';
^C
mysql> grant all privileges on test.* to 'test'@'localhost';
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 4774
Current database: *** NONE ***
Query OK, 0 rows affected (0.00 sec)
답변1
PostgreSQL과 달리 MySQL 및 MariaDB에는 단일 사용자 이름 역할이 없습니다. test
정의되지 않은 호스트 이름을 가진 사용자는 user 로 해석됩니다 test@%
.어느호스트는 다른 사용자 test@localhost
이며 완전히 다른 비밀번호를 가질 수 있습니다.
당신은하고 싶어 할 것입니다
GRANT ALL PRIVILEGES ON test.* TO test@localhost;
대신에. 실제로 CREATE USER
별도의 문을 완전히 생략하고 다음을 수행할 수 있습니다.
CREATE DATABASE test;
GRANT ALL PRIVILEGES ON test.* TO test@localhost IDENTIFIED BY 'password';
나머지는 MySQL이 처리할 것입니다.