[mysql] 오류 1396 (HY000) : ‘jack’@ ‘localhost’에 대한 CREATE USER 작업이 실패했습니다.

MySQL의 루트 인 경우에도 삭제 한 간단한 사용자를 다시 만들 수없는 것 같습니다.

내 경우 : 사용자 ‘잭’은 이전에 존재했지만 다시 생성하기 위해 mysql.user에서 삭제했습니다. 나는 그 표에서 이것에 대한 흔적을 보지 못한다. 다른 임의의 사용자 이름에 대해이 명령을 실행하면 ‘jimmy’과 같이 정상적으로 작동합니다 (원래 ‘jack’에서했던 것처럼).

사용자 ‘잭’을 손상시키기 위해 무엇을했으며, MySQL 설치에 유효한 사용자로 ‘잭’을 다시 만들려면 어떻게 손상을 취소 할 수 있습니까?

아래 예를 참조하십시오. (물론, 원래는 ‘잭’생성과 제거 사이에 많은 시간이있었습니다.)

mysql> CREATE USER 'jack'@'localhost' IDENTIFIED BY 'test123';
Query OK, 0 rows affected (0.00 sec)

mysql> select user,host from user;
+------------------+-----------------+
| user             | host            |
+------------------+-----------------+
| root             | 127.0.0.1       |
| debian-sys-maint | localhost       |
| jack             | localhost       |
| root             | localhost       |
| root             | russ-elite-book |
+------------------+-----------------+
5 rows in set (0.00 sec)

mysql> delete from user where user = 'jack';
Query OK, 1 row affected (0.00 sec)

mysql> select user,host from user;
+------------------+-----------------+
| user             | host            |
+------------------+-----------------+
| root             | 127.0.0.1       |
| debian-sys-maint | localhost       |
| root             | localhost       |
| root             | russ-elite-book |
+------------------+-----------------+
4 rows in set (0.00 sec)

mysql> CREATE USER 'jack'@'localhost' IDENTIFIED BY 'test123';
ERROR 1396 (HY000): Operation CREATE USER failed for 'jack'@'localhost'
mysql> CREATE USER 'jimmy'@'localhost' IDENTIFIED BY 'test123';
Query OK, 0 rows affected (0.00 sec)

mysql> select user,host from user;
+------------------+-----------------+
| user             | host            |
+------------------+-----------------+
| root             | 127.0.0.1       |
| debian-sys-maint | localhost       |
| jimmy            | localhost       |
| root             | localhost       |
| root             | russ-elite-book |
+------------------+-----------------+
5 rows in set (0.00 sec)



답변

을 시도하십시오 FLUSH PRIVILEGES;. 해당 오류 코드에 대한이 MySQL 버그 게시물은 개인 정보를 플러시 한 후와 비슷한 경우에 성공한 것으로 보입니다. 


답변

예,이 버그가 있습니다. 그러나 작은 해결 방법을 찾았습니다.

  • 사용자가 있다고 가정하면 사용자를 삭제하십시오.
  • 사용자를 삭제 한 후 mysql 권한을 플러시해야합니다.
  • 이제 사용자를 작성하십시오.

해결해야합니다. 사용자 admin @ localhost를 작성한다고 가정하면 다음과 같은 명령이됩니다.

드롭 사용자 admin @ localhost;
플러시 권한;
' admins_password '로
 식별되는 사용자 admin @ localhost를 작성하십시오.

건배


답변

이 버그는 2007 년 이래 bugs.mysql.com에있었습니다.이 스레드는 주로 1 년 전까지 만해도 그 모든 잘못된 답변의 패러 팅입니다.

MySQL의 문서에 따르면, 명령이 좋아 CREATE USER, GRANT, REVOKE, 및 DROP USER후속 필요로하지 않는 FLUSH PRIVILEGES명령을 사용합니다. 문서를 읽는다면 왜 분명합니다. MySQL 테이블을 직접 변경해도 정보가 메모리에 다시로드되지 않기 때문입니다. 그러나이 버그 주장에 대한 많은 해결책 FLUSH PRIVILEGES이 그 답입니다.

이것은 버그가 아닐 수도 있습니다. 문서 음모-문서는 버전마다 중요한 위치가 다릅니다.

13.7.1.2. DROP USER 구문

DROP USER 사용자 [, 사용자] …

DROP USER ‘jeffrey’@ ‘localhost’;

계정 이름의 사용자 이름 부분 만 지정하면 ‘%’의 호스트 이름 부분이 사용됩니다.

DROP USERMySQL 5.0.0에있는 것처럼 권한이없는 계정 만 제거합니다. MySQL 5.0.2에서는 계정 권한도 제거하도록 수정되었습니다. 즉, 계정 제거 절차는 MySQL 버전에 따라 다릅니다.

MySQL 5.0.2부터 다음과 같이 계정과 권한을 제거 할 수 있습니다.

DROP USER 사용자;

명령문은 모든 권한 부여 테이블에서 계정에 대한 권한 행을 제거합니다.

이 오류가 발생하는 유일한 시간은 내가 할 때입니다 DROP USER user. 문서에서 제안한 것처럼 MySQL은 모든 호스트의 모든 사용자를 삭제하는 방식으로 ‘%’를 와일드 카드로 취급하지 않습니다. 결국 그렇게 야생되지 않습니다. 또는 로컬 호스트 사용자를 삭제 한 다음 %에서 삭제하려고 할 때 작동하는 경우가 있습니다.

%에서 사용자를 삭제하려고하면 오류 메시지가 표시되고 종료됩니다. CREATE USERlocalhost 사용자가 삭제되지 않았으므로 localhost에서 후속 적 으로 실패합니다. 한 포스터가 제안한 것처럼 유령을 찾는 그랜트 테이블을 파고 시간을 낭비 할 필요가없는 것 같습니다.

나는 다음에 대해 7 표를 본다 :

DROP USER ‘jack @ localhost’; // 계정을 완전히 삭제

DROP USER 'jack@localhost'@'%';# 잘못으로 해석되는

실제로 동일한 오류 메시지를 생성하는 실제 버그가있는 것처럼 보이지만 처음 생성 된 사용자 (새 mysql 서버 설치 후)가 삭제되는 것과 관련이 있습니다. 그 버그가 수정되었는지 여부는 모르겠습니다. 그러나 나는 최근에 일어난 일을 기억하지 못하며 나는 현재 5.5.27까지입니다.


답변

사용자를 제거하기 위해 테이블에서 DELETE명령문 을 사용하는 경우을 사용하여 mysql.user사용자를 다시 설정하려고 CREATE USER하면 1396오류가 발생합니다. 다음을 실행하여이 오류를 제거하십시오.DROP USER 'username'@'host';

DELETE
  FROM mysql.user
 WHERE user = 'jack';

(잭을 재생성하려고하면 1396 오류가 발생합니다)

CREATE USER 'jack'@'localhost' IDENTIFIED BY PASSWORD '*Fi47ytFF3CD5B14E7EjkjkkC1D3F8086A5C0-krn';

(을 실행하여이 상황에서 벗어나십시오 DROP USER)

DROP USER 'jack'@'localhost';

(나는 FLUSH PRIVILEGES상처를 줄 수는 없지만 사용자를 먼저 떨어 뜨린다 고 가정 합니다.)


답변

그런 식으로 사용자를 수동으로 삭제해서는 안됩니다. MySQL에는 REVOKE권한을 제거하고 DROP USER삭제하는 구문이 있습니다.

REVOKE priv1,priv2,priv3,etc... FROM 'jack@localhost'; // remove certain privileges
DROP USER 'jack@localhost'; // completely delete the account

백그라운드에서 방해하지 않고 제공된 도구를 사용하는 것이 가장 좋습니다.


답변

사용자를 삭제하고 권한을 플러시하십시오. 그런 다음 사용자를 작성하십시오. 작동합니다!


답변

시도 delete from mysql.db where user = 'jack'하고 사용자를 만듭니다