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


311

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)

답변:


233

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


13
나는이 제안을 발견하고 성공하지 않고 일찍 시도했지만 다른 것이 잘못되었을 수 있습니다. 지금 다시 시도한 다음 다른 사용자와 상황을 다시 작성하면 실제로 트릭을 수행 한 것으로 나타났습니다. 물론 오늘날 공식적인 대답은 "멍청하지 말고"REVOKE 및 DROP USER를 사용하여 올바르게 수행하는 것이 었습니다. 나는 세 가지 답변 모두에 빚을졌다. (이것은 현재의 처지에서 나를 쫓아 낸 것일 뿐이다).
Russ Bateman

13
2016 년 mysql은 v14.14에 있으며 여전히 손상되었습니다.
ivo Welch

4
먼저 @ tver3305 답변에 따라 사용자를 삭제해야했습니다.
Shautieh

9
10.1.21과 동일한 문제가 발생하지만 "플러시 권한"은 아무런 차이가 없습니다. 사용자를 삭제하고 플러시 한 다음 작성합니다. "행 7의 오류 1396 (HY000) : 실패 CREATE ... 왜 내가 실패했는지와 같은 오류에 대해 mysql / mariadb를 조금씩 설명 할 수 있기를 바랍니다.
David M. Karr

3
사용자를 삭제하려고 할 때도 오류가 발생했습니다. '플러시 권한'이 작동하지 않았습니다. 조금 연구를 한 후 모든 액세스를 취소하고 사용자를 삭제하여 솔루션을 찾았습니다. , 플러시 작업이 비슷한 경우에 도움이 될 것입니다.이 페이지에서 자세한 설명을 공유했습니다 rathishkumar.in/2018/10/…
Rathish

545

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

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

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

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

건배


58
플러시 권한만으로는 효과가 없었습니다. 사용자가 모든 것을 고쳤습니다. 감사.
Jake

3
저도 마찬가지입니다. 먼저 사용자를 삭제해야했습니다.
kgiannakakis

3
@QuantumMechanic 솔루션은 저에게 효과가 없었지만 드롭 후 플러시했습니다.
호브

제 경우에는 권한을 플러시하지 않고 사용자를 삭제하는 것이 어려웠습니다.
Scadge

이 거대한 생명 보호기이었다 - 로컬 호스트 부분 드롭 사용자 있던 중요한 부분 위의 @Jake와 마찬가지로
kellyfj

46

이 버그는 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까지입니다.


8
당신은 MySQL 문서 작성기입니까?
Pacerier

이것이 저에게 답이었습니다. Mariadb는이 버그를 물려 받았습니다.
초에 zerpsed

이것이 왜 대답이 아닌가 : /. 어쨌든, @ user1969061 감사합니다. 이것은 확실히 나를 위해 일했다mariadb-server-5.5.60-1.el7_5.x86_64
한 솔로

36

사용자를 제거하기 위해 테이블에서 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상처를 줄 수는 없지만 사용자를 먼저 떨어 뜨린다 고 가정 합니다.)


24

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

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

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


2
이것은 실제 답변이지만 내가 가진 문제 (내 어리 석음에 의해 생성 됨)에는 해당되지 않았습니다. 나를 바로 잡아 주셔서 감사합니다!
Russ Bateman

@Marc, 그렇다면flush privileges처음부터 발명 을 했습니까? 공식 MySQL의 문서는 어떻게 같은 것들에 대한 이야기 delete from user where user = 'jack';flush privileges. 왜 그들이 제공된 도구의 일부가 아니라고 말합니까?
Pacerier

1
@ user1969061이 지적했듯이 'jack@localhost'아마도 'jack'@'localhost'여기에 있어야 합니다.
jochen

11

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


1
사용자를 삭제하기 전까지 플러싱 권한만으로는 작동하지 않았습니다. 감사.
Brandon Fitzpatrick

10

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


1
이것은 설치가 어떻게 손상되었는지 이해하는 데 도움이되었습니다. 대단히 감사합니다.
Russ Bateman

Fely의 의견을 자세히 읽으십시오. 관련된 테이블이 더 있습니다.
죄수 13

6

MySQL 5.6에서는 사용 Drop user userid;이 작동하지 않습니다. 사용 : Drop user 'userid'@'localhost';및 / 또는 Drop user 'userid'@'%';. 이런 식으로 사용자를 삭제하고 다시 만들 수있었습니다.


5
two method 
one :
setp 1: drop user 'jack'@'localhost';
setp 2: create user 'jack'@localhost identified by 'ddd';

two:
setp 1: delete from user where user='jack'and host='localhost';
setp 2: flush privileges;
setp 3: create user 'jack'@'localhost' identified by 'ddd';


4

당신은 SQL이있는 사용자를 삭제하려면, 당신은이 테이블에서 관련 데이터를 삭제해야합니다 columns_priv, db, procs_priv, tables_priv. 그런 다음 실행flush privileges;


좋은 대답 !! 귀하의 답변은 "이 패치를 사용하면 좋을 것"이 아니라 실제로 발생하는 일에 대한 '비하인드 스토리'문제를 노출시킵니다. 나는 두 가지 유형의 답변이 모두 포함되어 수프에서 견과류까지 이해할 수 있습니다. 이제는 올바른 방법으로이 작업을 수행하는 것이 얼마나 많은 일인지 알고 있으며, 다른 사람이 설명한 방법을 사용해야하는 이유가 더욱 강화되었습니다. 대박! 위의 답변은 많았지 만이 사이트에 새로 온 사람이 어떤 것인지 알고 있으므로 투표를하겠습니다. 그들은 당신이 처음있을 때 다른 사람들을 돕는 것을 정말로 어렵게 만듭니다.
죄수 13

이것은 대체로 허용되는 답변이어야합니다. mysql 5.5와 DROP USER IF EXISTS를 아직 사용할 수 없으므로 DELETE FROM 사용자 구문을 사용해야합니다 (사용자 존재를 먼저 테스트해야 함). 사용자 테이블에서만 삭제해도 작동하지 않았습니다. FLUSH PRIVILEGES도 마찬가지였습니다. 위의 다른 테이블에서 삭제해야합니다.
alds

4

재밌게 MySQL 워크 벤치가 나를 위해 해결했습니다. 관리 탭-> 사용자 및 권한에서 사용자가 오류와 함께 나열되었습니다. 삭제 옵션을 사용하면 문제가 해결되었습니다.


3

이 문제에 대한 간단한 해결 방법. "delete"명령은 "mysql"데이터베이스의 "user"테이블에있는 사용자 레코드 만 제거하므로이를 다시 추가 한 다음 사용자를 완전히 삭제할 수 있습니다. 그런 다음 같은 이름의 사용자를 만들 수 있습니다.

1 단계. MySQL 데이터베이스에서 사용자 테이블의 레코드 형식 찾기

use mysql;
select * from user;

2 단계. 1 단계에 표시된 열에 따라 사용자 이름으로 더미 레코드를 만듭니다. 예를 들어, "사용자 이름"을 사용자 이름으로 바꾸라는 메시지가 표에 삽입됩니다.

Insert into user value ('%','username','N','N','N','N','N',
'N','N','N','N','N','N','N','N','N','N','N','N','N','N','N',
'N','N','N','N','N','N','N','N','N','','','','','0','0','0',
'0','mysql_native_password',
'*52C5E3AC6BC5E2E0BFF86978BF62A1481AC79D58','N',
'2016-12-10 23:59:12',null,'N');

참고 : 때로는 삽입시 문제가 발생할 수 있습니다. 데이터를 변경하여 작동 시키십시오.

3 단계. 사용자를 삭제합니다.

drop user username;

이제 같은 이름의 사용자를 만들 수 있습니다.


<TABLENAME> DESCRIBE보십시오
죄수 (13)

2

이 게시물 MySQL ERROR 1045 (28000) : 사용자 'bill'@ 'localhost'에 대한 액세스가 거부되었습니다 (암호 사용 : YES) . 때때로 익명 사용자 ''@ 'localhost'또는 ''@ '127.0.0.1'이 있습니다. 따라서 문제를 해결하기 위해

  1. 먼저 '사용자 만들기'에 실패한 사용자를 삭제하십시오.

  2. 새로운 사용자를 만듭니다.

  3. 새 사용자에게 필요한 권한을 부여하십시오.

  4. 플러시 권한.


고마워 익명 사용자를 삭제 한 mysql_secure_installation을 실행하는 것을 잊었습니다.
ablackhat

2

나는 같은 오류가 있었다. 그러나 "FLUSH PRIVILEGES;"명령 도와주지 않았다. 나는 그렇게했다 :

CREATE USER 'jimmy'@'localhost' IDENTIFIED BY 'test123';
UPDATE mysql.user SET USER='jack' WHERE USER='jimmy';

0

MySQL 서버가 --skip-grant-tables 옵션으로 실행 중이므로이 명령문을 실행할 수 없습니다


0

나는 이것이 오래된 것을 알고 있지만 Google의 첫 번째 결과이므로 솔루션을 추가해야한다고 생각했습니다. 필자의 경우 사용자를 삭제하면 문제가 없지만 사용자를 다시 만들면 "오류 2013 (HY000) : 쿼리 중 MySQL 서버와의 연결이 끊어졌습니다"및 "ERROR 2006 (HY000) : MySQL 서버가 사라졌습니다."라는 메시지가 표시됩니다. 플러시 권한-> 사용자 솔루션 삭제를 시도했지만 여전히 동일한 오류가 발생했습니다.

필자의 경우 오류는 5.1-> 5.6에서 mysql 업그레이드로 인한 것입니다. 오류 로그를 보면 mysql_upgrade를 실행한다고 알려졌습니다. 저것과 나의 사용자 생성 진술은 잘 작동했습니다!


0

최근 에이 오류가 발생했습니다.

나를 위해 일한 것은 mysql Workbench 'Users and Privileges'를 확인하는 중이며 여전히 사용자를 알고 있습니다.

거기에서 삭제 한 후 사용자를 다시 만들 수있었습니다.


0

mysql> DELETE FROM mysql.db WHERE user = 'jack'

서버를 다시 시작하십시오.

# mysql.server restart

그런 다음 CREATE USER명령을 수행하십시오 .


이것은 유용하지 않습니다. 이 오류는에 발생했습니다 CREATEDELETE.
waqasgard

0

오늘이 문제에 직면했으며 다음 단계를 수행하여 문제를 해결했습니다.

1) 필수 필드 값을 제공하는 문제가있는 사용자를 수동으로 삽입 mysql.user

mysql> insert into user(Host, User, Password, ssl_type) 
   values ('localhost', 'jack', 'jack', 'ANY');

2)

mysql> select * from user where User = 'jack';
   1 row in set (0.00 sec)

3) A.

mysql> drop user jack;
Query OK, 0 rows affected (0.00 sec)

B. mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

C. mysql> create user 'jack' identified by 'jack';
Query OK, 0 rows affected (0.00 sec)

D. mysql> select Host, User, Password, ssl_type  from user where User = 'jack';
+-----------+-----------+-------------------------------------------+----------+
| Host      | User      | Password                                  | ssl_type |
+-----------+-----------+-------------------------------------------+----------+
| localhost | jack      | jack                                      | ANY      |
| %         | jack      | *45BB7035F11303D8F09B2877A00D2510DCE4D758 |          |
+-----------+-----------+-------------------------------------------+----------+
2 rows in set (0.00 sec)

4) A.

mysql> delete from user 
 where User = 'nyse_user' and 
       Host = 'localhost' and 
       Password ='nyse';
Query OK, 1 row affected (0.00 sec)

비.

mysql> select Host, User, Password, ssl_type  from user where User = 'jack';
+------+-----------+-------------------------------------------+----------+
| Host | User      | Password                                  | ssl_type |
+------+-----------+-------------------------------------------+----------+
| %    | jack      | *45BB7035F11303D8F09B2877A00D2510DCE4D758 |          |
+------+-----------+-------------------------------------------+----------+
1 row in set (0.00 sec)

도움이 되었기를 바랍니다.


-2

mysql.db에서 사용자 관련 데이터를 삭제하고 (다른 테이블에서도 가능) 두 데이터를 다시 만드십시오.


-2

몇 번의 검색을 거친 후에도 같은 문제에 봉착했습니다. 저에게 도움이되는 솔루션을 찾았습니다. 이미 사용자를 만들었으므로 이제 FLUSH PRIVILEGESMySQL 콘솔 에서 작업을 시도 하십시오. 이 문제는 이미 MySql 버그 게시물에 있습니다. 이 항목을 확인할 수도 있습니다. 이제 플러시 후 새 사용자를 만들 수 있습니다. 아래 단계를 따르십시오.

Step-1: Open terminal Ctrl+Alt+T
Step-2: mysql -u root -p  , it will ask for your MySQL password.

이제 MySQL 콘솔을 볼 수 있습니다.

Step-3: CREATE USER 'username'@'host' IDENTIFIED by 'PASSWORD';

사용자 이름 대신 원하는 사용자 이름을 입력 할 수 있습니다. 로컬 컴퓨터에서 Mysql을 실행하는 경우 "localhost" 를 입력하십시오. 호스트 대신 하고, 그렇지 않으면 액세스하려는 서버 이름을 지정하십시오.

예 : CREATE user smruti @ localhost 'hello'에 의해 식별되었습니다.

이제 새로운 사용자가 생성되었습니다. 모든 액세스 권한을 부여하려면 다음을 입력하십시오.

GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';

이제 다음을 입력하여 MySQL을 종료 할 수 있습니다 \q이제을 .

mysql -u newusername -p을 입력 한 다음 Enter 키를 누릅니다. 당신은 모든 것을 볼 수 있습니다.

도움이 되었기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.