이것이 일반적인 MySQL 권한 세트입니까?


9

로컬 테스트 setup 프 설정에서 거의 phpmyadmin과 제목 상태를 사용하면 user = ANY, password = NO로 표시된 3 명의 사용자가 있습니다.

USER | HOST    | Password | Global Priv | Grant
-----+---------+----------+-------------+------
Any  | %       | No       | USAGE       | No
Any  | Local   | No       | USAGE       | No
Any  | Domain  | No       | USAGE       | No
-----+---------+----------+-------------+------

3 명의 사용자 중 어느 누구도 테이블에 대한 특정 권한을 가지지 않으므로 많은 일을 할 수 없습니다. 다른 사용자 그룹에 속하지 않는 '모든'사용자에게 권한이 없음을 명시 적으로 나타내는 일종의 일반적인 보안 조치입니까?


mysql에는 게시되지 않은 기본 권한이 있기 때문에 이것은 실제로 매우 좋은 질문입니다. +1 !!!
RolandoMySQLDBA

답변:


6

실제로이 세 사용자 계정은 실제로 매우 위험합니다. 데이터베이스를 테스트하는 데 큰 위협이됩니다.

불행히도 mysql은 테스트 데이터베이스에 대한 전체 액세스 권한을 제공합니다. 어떻게 찾을 수 있습니까?

이 쿼리를 실행하십시오.

 SELECT user,host,db from mysql.db;

mysql을 설치하면 'test'라는 이름의 데이터베이스에 액세스하거나 처음 5자가 'test_'인 두 개의 행이 표시됩니다.

이것이 왜 문제입니까 ???

이 명령을 실행하십시오 :

$ mysql -u'' -Dtest

비밀번호없이 테스트 데이터베이스를 연결했을 것입니다.

이제 테이블을 작성하고 행으로로드하십시오.

CREATE TABLE mytable (a int);
INSERT INTO mytable VALUES (1);

알았어. 이 테이블의 크기를 30 배로 두 배로 늘릴 수 있습니까?

INSERT INTO mytable SELECT * FROM mytable;
INSERT INTO mytable SELECT * FROM mytable;
... (30 times)
INSERT INTO mytable SELECT * FROM mytable;

당신은 무엇을 얻습니까 ?? 1,073,741,824 개의 행이있는 테이블. 쉽게 4GB 이상.

어떤 크기의 테이블이든 만들 수 있다고 상상해보십시오. 테스트 데이터베이스에서 많은 테이블을 생성하고 자유롭게 액세스 할 수 있습니까?

이러한 상황에서 할 수있는 최선의 방법은이 쿼리를 실행하는 것입니다.

DELETE FROM mysql.db;

mysql을 다시 시작하십시오. 그러면이 세 계정이 제대로 작동하지 않게됩니다.

시도 해봐 !!!

업데이트 2011-09-12 10:00 EDT

삭제 :

DELETE FROM mysql.db;
FLUSH PRIVILEGES;

초기 설치에 필요한 것입니다. 그러나 사용자를 이미 설정 한 경우 대신 다음을 실행할 수 있습니다.

DELETE FROM mysql.db WHERE db IN ('test','test_%');
FLUSH PRIVILEGES;

이렇게하면 특정 두 가지 DB 권한이 제거됩니다.

내 대답에서 언급했듯이 세 가지 권한은 테스트 데이터베이스에 매우 위험합니다. 이 DELETE를 실행하면 데이터베이스를 테스트 할 수있는 모든 권한이있는 계정이 무효화됩니다.


설명해 주셔서 감사하지만 mysql.db에서 DELETE FROM이 3 명의 사용자로부터 다른 부분을 삭제합니까? 3과 별도로 데이터 / 권한을 삭제하고 싶지 않습니다.
Chris

@Chris-귀하의 의견을 반영하기 위해 3 시간 전에 답변을 업데이트했습니다.
RolandoMySQLDBA

-1

이러한 익명 계정을 유지하는 위험은 이미 잘 설명되어 있습니다.

이 매뉴얼은 " 초기 MySQL 계정 보안 "을 위해 취해야 할 단계의 포괄적 인 점검 목록을 제공합니다 .

특히 "익명 계정 암호 할당"섹션에서 이러한 계정을 제거하는 것이 좋습니다.

또한 "테스트 데이터베이스 보안"장에서는 다음을 조언합니다.

기본적으로 mysql.db테이블에는 모든 사용자 test가로 시작하는 이름을 가진 데이터베이스 및 기타 데이터베이스에 대한 액세스를 허용하는 행이 포함 됩니다 test_. (...) 이것은 권한이없는 계정에서도 그러한 데이터베이스를 사용할 수 있음을 의미합니다. 테스트 데이터베이스에 대한 사용자 액세스를 제거하려면 다음과 같이하십시오.

mysql> DELETE FROM mysql.db WHERE Db LIKE 'test%';
mysql> FLUSH PRIVILEGES;

(...) 위와 같이 변경하면 전역 데이터베이스 권한 또는 테스트 데이터베이스에 대해 명시 적으로 부여 된 권한이있는 사용자 만 사용할 수 있습니다.

특히 Windows 이외의 시스템에서는 mysql_secure_installation스크립트 를 실행하는 것이 좋습니다 . 내가 생각하는 Windows 설치 프로그램은 여러 가지 설치 프로파일을 제공합니다. 그들 중 일부는 안전하지 않은 설정을 자동으로 비활성화합니다. 그렇지 않은 경우 검사 목록을 수동으로 실행해야합니다.

WAMP와 같은 타사 설치 프로그램에주의를 기울여야합니다. 공식 MySQL 매뉴얼에 표시된 기본 권한은 이러한 매뉴얼 ( "매뉴얼의 범위를 벗어난") 설치에 항상 적용되지 않을 수도 있습니다. 물론 프로덕션 서버의 경우 WAMP 설치 등을 피해야합니다. .


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