[mysql] MySQL 8.0에서 루트 사용자에게 모든 권한을 부여하는 방법

시도

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입니다.



답변

MySQL 8부터는 GRANT명령을 사용하여 더 이상 (암시 적으로) 사용자를 생성 할 수 없습니다 . 사용은 사용자를 생성 에 의해 다음, 대신에 GRANT의 문 :

mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'root';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

에 대한 보안 위험에 대한 주의 사항 은 다음을 WITH GRANT OPTION참조하십시오.


답변

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.cnfmysql을 다시 시작 해야합니다 .

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 @ % 사용자에게 잘못된 자격 증명이 연결되어 있다는 것입니다. 따라서 사용자의 권한을 수정하려고 시도했지만 운이 좋지 않으면 다음을 시도하십시오.

  1. 사용자 삭제.
  2. 사용자를 다시 만듭니다.
  3. 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