시도
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
얻기
오류 1064 (42000) : SQL 구문에 오류가 있습니다. 1 행의 ‘IDENTIFIED BY’root ‘WITH GRANT OPTION’근처에서 사용할 올바른 구문은 MySQL 서버 버전에 해당하는 설명서를 확인하십시오.
참고 : 이전 버전에서 시도했을 때도 마찬가지입니다.
또한 시도
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
얻기
오류 1410 (42000) : GRANT로 사용자를 만들 수 없습니다.
MySQL (8.0.11.0) 사용자 이름 / 암호는 root / root입니다.
답변
답변
1) 이것은 나를 위해 일했습니다. 먼저 새 사용자를 만듭니다. 예 : foo
비밀번호가있는 사용자bar
> mysql> CREATE USER 'foo'@'localhost' IDENTIFIED WITH mysql_native_password BY 'bar';
2) 아래 코드를 사용자 이름으로 ‘foo’로 바꿉니다.
> mysql> GRANT ALL PRIVILEGES ON database_name.* TO'foo'@'localhost';
참고 : database_name은 권한을 가지려는 데이터베이스입니다 . 모든 것을 의미합니다
3) 사용자 foo로 로그인
mysql> mysql -u foo -p
비밀번호 : bar
4) Sequelize의 초기 연결이 pw bar로 foo로 설정되어 있는지 확인하십시오.
답변
많은 (잘못된) 답변을 봅니다. 다음과 같이 간단합니다.
USE mysql;
CREATE USER 'user'@'localhost' IDENTIFIED BY 'pass';
GRANT ALL ON *.* TO 'user'@'localhost';
FLUSH PRIVILEGES;
참고 : 자체 생성 대신 user
사용 root
하여 데이터베이스에 연결할 수 있습니다 . 그러나 기본 루트 계정을 사용하여 응용 프로그램이 데이터베이스에 연결할 수 있도록하는 것은 선호되는 방법이 아닙니다.
대체 권한 (최소 권한 원칙을주의하고 기억하십시오) :
-- Grant user permissions to all tables in my_database from localhost --
GRANT ALL ON my_database.* TO 'user'@'localhost';
-- Grant user permissions to my_table in my_database from localhost --
GRANT ALL ON my_database.my_table TO 'user'@'localhost';
-- Grant user permissions to all tables and databases from all hosts --
GRANT ALL ON *.* TO 'user'@'*';
어떻게 든 다음 오류가 발생하는 경우 :
오류 1130 (HY000) : 호스트 ‘1.2.3.4’는이 MySQL 서버에 연결할 수 없습니다.
다음 두 줄을 추가 / 변경하고 /etc/mysql/my.cnf
mysql을 다시 시작 해야합니다 .
bind-address = 0.0.0.0
skip-networking
답변
내 사양 :
mysql --version
mysql Ver 8.0.16 for Linux on x86_64 (MySQL Community Server - GPL)
나를 위해 일한 것 :
mysql> CREATE USER 'username'@'localhost' IDENTIFIED BY 'desired_password';
mysql> GRANT ALL PRIVILEGES ON db_name.* TO 'username'@'localhost' WITH GRANT OPTION;
두 쿼리의 응답 :
Query OK, O rows affected (0.10 sec*)
NB : 이전에 데이터베이스 (db_name)를 만들었고 DB의 모든 테이블에 부여 된 모든 권한이있는 사용자 자격 증명을 만들었습니다. 여기서 읽은 기본 루트 사용자를 사용하는 것이 가장 좋습니다.
답변
지정된 사용자가 MySQL에 존재하지 않습니다 (따라서 MySQL은 버전 8 이전과 마찬가지로 GRANT를 사용하여 생성하려고하지만이 버전에 도입 된 제한 사항으로 인해 실패합니다).
이 시점에서 MySQL은 꽤 멍청하기 때문에 ‘root’@ ‘localhost’가 있고 ‘root’@ ‘%’에게 권한을 부여하려고하면 다음을 포함한 모든 호스트의 루트 사용자에 대한 일반화 된 개념이 아닌 다른 사용자로 취급됩니다. localhost.
오류 메시지도 오해의 소지가 있습니다.
따라서 오류 메시지가 표시되면 다음과 같이 기존 사용자를 확인하십시오.
SELECT CONCAT("'", user, "'@'", host, "'") FROM mysql.user;
그런 다음 누락 된 사용자를 생성하거나 (Mike가 조언 한대로) GRANT 명령을 실제 기존 사용자 사양으로 조정합니다.
답변
주제에 대한 나의 2 센트. MySQL Workbench에서 연결을 시도하는 것과 똑같은 문제가 발생했습니다. 개발을위한 로컬 샌드 박스를 설정하기 위해 bitnami-mysql 가상 머신을 실행하고 있습니다.
Bitnami의 튜토리얼은 ‘모든 권한 부여’명령을 실행한다고 말했습니다.
/opt/bitnami/mysql/bin/mysql -u root -p -e "grant all privileges on *.* to 'root'@'%' identified by 'PASSWORD' with grant option";
이것은 분명히 작동하지 않았으며 마침내 Mike Lischke의 대답을 사용하여 작동했습니다.
내가 생각하는 것은 root @ % 사용자에게 잘못된 자격 증명이 연결되어 있다는 것입니다. 따라서 사용자의 권한을 수정하려고 시도했지만 운이 좋지 않으면 다음을 시도하십시오.
- 사용자 삭제.
- 사용자를 다시 만듭니다.
- my.cnf 구성 파일에 올바른 바인딩이 있는지 확인하십시오. 제 경우에는 샌드 박스 환경을위한 것이기 때문에 라인을 주석 처리했습니다.
Mysql 콘솔에서 :
사용자 나열 (모든 사용자를 보는 데 도움이 됨) :
select user, host from mysql.user;
원하는 사용자 삭제 :
drop user '{{ username }}'@'%';
사용자 생성 및 권한 부여 :
CREATE USER '{{ username }}'@'%' IDENTIFIED BY '{{ password }}';
GRANT ALL PRIVILEGES ON *.* TO '{{ username }}'@'%' WITH GRANT OPTION;
다음 명령을 실행하십시오.
FLUSH PRIVILEGES;
mysql 구성 파일 ‘my.cnf’를 찾아 다음과 같은 줄을 찾습니다.
bind-address=127.0.0.1
‘#’을 사용하여 주석을 추가합니다.
#bind-address=127.0.0.1
그런 다음 mysql 서비스를 다시 시작하십시오.
이것이 같은 문제가있는 사람에게 도움이되기를 바랍니다!
답변
이것은 나를 위해 일했습니다.
mysql> FLUSH PRIVILEGES
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES
