mysql.user에서 익명 사용자를 삭제할 수 없습니다


15

mysql.users 데이터베이스에서 익명 사용자를 삭제하려고합니다. 그러나 나는 이상한 행동을하고있다. 명령을 입력하면

DROP User ''@'WOPR';

일반 오류 메시지가 나타납니다. 그래서 컴퓨터를 재부팅하고 다시 시도했습니다. 이번에는 응답을 받았습니다

Query OK, 0 rows affected.

하지만 내가 넣을 때

SELECT User, Host, Password FROM mysql.user WHERE User='';

반환은 다음과 같습니다

+------+------+----------+
| User | Host | Password |
+------+------+----------+
|      | WOPR |          |
+------+------+----------+

(WOPR은 내 호스트 이름입니다)

나는 명령을 실행

DROP User ''@'WOPR';

같은 결과를 얻습니다.

Arch Linux, 커널 버전 2.6.33에서 MySQL 5.5를 새로 설치하고 있습니다.

이 행동의 원인이 무엇인지 아는 사람이 있습니까?


DBA StackExchange에 이러한 성격의 질문을 보내라는 단어를 보내십시오!
RolandoMySQLDBA 1

답변:


15
DELETE FROM mysql.user WHERE user='' AND host='WOPR';
FLUSH PRIVILEGES;

이것은 당신을 위해해야합니다.

시도 해봐 !!!

경고

MySQL에는 특정 사용자가 mysql.user에 사전 설치되어 있습니다. 또한 mysql.db에는 데이터베이스를 테스트 할 수있는 익명 액세스 권한과 전체 권한이있는 두 명의 사용자가 있습니다.

그냥하세요

SELECT * FROM mysql.db \G

test_로 시작하는 데이터베이스 나 test_로 시작하는 모든 데이터베이스 사용자는 테스트 데이터베이스의 모든 작업을 거의 수행 할 수 있습니다. 테스트 데이터베이스에 대한 전체 액세스 권한을 가진 사람이 몇 분 안에 디스크를 먹을 수 있기 때문에 이것은 나쁩니다.

예:

use test
CREATE TABLE junk (INT a) ENGINE=MyISAM;
INSERT INTO junk VALUES (1);

알았어. 4 바이트의 테이블을 만듭니다.

이제이 SQL 문을 30 회 실행 해보십시오.

INSERT INTO junk SELECT * FROM junk;

1,073,741,824 행 (4GB + 파일)이있는 인스턴트 테이블 !!! 디스크에 이런 종류의 혼란을 일으킬 수있는 테스트 데이터베이스에 대한 모든 권한을 가진 이미징.

내 조언은 테스트 사용자 액세스를 정리하기 위해 이것을 실행하는 것입니다.

DELETE FROM mysql.db WHERE db LIKE 'tes%' AND user='';
FLUSH PRIVILEGES;

자세한 설명은 my post MySQL : mysql.db에 "test"항목이있는 이유를 참조하십시오 .

건배 !!!


안녕 롤란도, 그 트릭을했다, 감사합니다! 실제로 테스트 데이터베이스 액세스를 지금 수정하고 있습니다.
SirTasty

drop user기본 mysql.user테이블을 직접 수정하는 대신 구문 을 사용하는 방법이 없습니까?
Pacerier

1
@Pacerier 원래 질문을보십시오. 실제 문제는 DROP USER사용자 필드가 비어 있으면 (빈 문자열) 구문이 작동하지 않는다는 것입니다. 응답이 지정한 방식으로 수행해야합니다.
RolandoMySQLDBA

@RolandoMySQLDBA, mysql.user테이블을 해킹하는 것 외에 다른 솔루션이 있습니까?
Pacerier

@Pacerier 마지막 ​​링크를 읽으면 MySQL (현재 Oracle) mysql.db은 설치시 익명의 사용자가 테스트 데이터베이스에 액세스 할 수 있도록 두 개의 행을 직접 배치 한다는 것을 알 수 있습니다. 흥미롭게도 Percona Server의 설치는 설치가 완료되기 전에 해당 행을 삭제한다고 들었습니다 ( dba.stackexchange.com/questions/66584/… ). MySQL을 사용하고 있으므로 mysql_secure_installation을 실행하거나이 두 행을 직접 삭제하십시오.
RolandoMySQLDBA
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.