>php教程 >PHP开发 >MySQL 데이터베이스 보안 문제 설명

MySQL 데이터베이스 보안 문제 설명

高洛峰
高洛峰원래의
2016-12-02 14:02:191500검색

데이터베이스 시스템의 보안에는 여러 측면이 포함됩니다. 많은 경우 데이터베이스 서버는 클라이언트가 네트워크에서 연결할 수 있도록 허용하므로 클라이언트 연결의 보안은 MySQL 데이터베이스의 보안에 매우 중요한 영향을 미칩니다.

클라이언트의 명령줄에 비밀번호를 제공하지 마세요

mysql, mysqladmin 등의 클라이언트를 사용하여 사용자 ID로 MySQL 서버에 연결할 때 비밀번호를 제공해야 합니다. 연결을 위한 비밀번호입니다.

1. 명령줄에서 비밀번호를 입력할 수 있습니다.

shell>mysql –u root –pmypass

-p 옵션과 사이에 공백이 없어야 합니다. 그렇지 않으면 비밀번호를 입력하라는 메시지가 표시되고 오류가 보고됩니다.

긴 형식을 사용할 수도 있습니다.

shell>mysql –user=root –password=mypass

이제 그렇게 하면 결과를 확인할 수 있습니다.

Unix에서는 $ps –aux | grep mysql

win9x에서는 Ctrl+Alt+Del 키를 누르고 NT에서는 작업 관리자를 열 수 있습니다.

무엇을 발견하셨나요? 비밀번호가 눈앞에 명확하게 표시되어 있는 것을 발견했습니다. 그러니 언제든지 이런 짓을 하지 마세요.

따라서 클라이언트에게 비밀번호를 묻는 메시지를 표시하도록 요청해야 합니다.

shell>mysql –u root –p

옵션 파일을 사용하여 비밀번호를 제공할 수도 있습니다. 하지만 보안상의 이유로 주의하십시오. 비밀번호는 옵션 파일에 저장할 수 없습니다. 비밀번호 옵션만 제공하고 클라이언트에서 비밀번호를 묻는 메시지를 표시하도록 할 수 있습니다.

SSH를 사용하여 클라이언트 연결 암호화

SSH를 사용하여 원격 MySQL 서버(David Carlson)에 대한 보안 연결을 얻는 방법에 대한 참고 사항입니다.

Windows 컴퓨터에 SSH 클라이언트를 설치하세요. 저는 에서 무료 SSH 클라이언트를 사용했습니다. 기타 유용한 링크:

 

 .

SSH를 시작합니다. 호스트 이름 = MySql 서버 이름 또는 IP 주소로 설정하고, userid = 사용자 이름으로 설정하여 서버에 로그인하세요.

"로컬 단어"를 클릭하세요. 로컬 포트 ​​설정: 3306, 호스트: localhost, 원격 포트: 3306

모든 항목을 저장하지 않으면 다음에 다시 수행해야 합니다.

SSH를 사용하여 서버에 로그인하세요.

일부 ODBC 애플리케이션(예: Access)을 시작합니다.

서버에 "localhost" 사용자를 사용하는 것을 제외하고 평소와 마찬가지로 새 파일을 만들고 ODBC 드라이버를 사용하여 mySQL에 연결합니다.

완료되었습니다. 인터넷에 직접 연결하면 잘 작동합니다.

Unix에서 루트 사용자로 MySQL 데몬을 실행하지 마세요.

Unix에서 루트 사용자로 MySQL 데몬을 실행하지 마세요. mysqld는 모든 사용자로 실행할 수 있으며, 새로운 Unix 사용자 mysql을 생성하여 모든 것을 더욱 안전하게 만들 수도 있습니다. 다른 Unix 사용자로 mysqld를 실행하는 경우에는 사용자 테이블에서 루트 사용자 이름을 변경할 필요가 없습니다. 왜냐하면 MySQL 사용자 이름은 Unix 사용자 이름과 아무 관련이 없기 때문입니다.

다른 Unix 사용자로서 mysql.server 시작 스크립트 mysqld를 편집할 수 있습니다. 또는 옵션 파일을 사용하십시오. 루트가 아닌 사용자로 MySQL 서버를 시작하는 방법에 대한 자세한 내용은 2장을 참조하십시오.

데이터베이스 디렉토리 보안

MySQL 서버는 mysql 데이터베이스의 인증 테이블을 통해 매우 유연한 권한 시스템을 제공하여 네트워크에서 액세스하는 데이터의 보안을 보장합니다. 그러나 서버 호스트의 다른 사용자가 서버 디렉토리에 직접 액세스할 수 있는 경우 서버의 데이터는 여전히 안전하지 않습니다.

일반적으로 권한이 없는 Unix 사용자로 데몬을 실행합니다. mysqld를 실행하는 Unix 사용자가 데이터베이스 디렉토리에서 읽기/쓰기 권한을 가진 유일한 사용자인지 확인하십시오.

가능한 보안 취약점

분명히 서버 호스트의 다른 사용자에게 데이터베이스 디렉터리 파일에 대한 쓰기 액세스 권한을 부여하지 않을 것이지만 읽기 액세스만 제공하는 것도 매우 위험합니다.

GRANT 및 SET PASSWORD와 같은 쿼리가 기록되므로 일반 로그 파일과 업데이트 로그 파일에는 비밀번호에 대한 민감한 쿼리 텍스트가 포함되어 있습니다. 공격자가 이러한 로그에 대한 읽기 액세스 권한을 갖고 있는 경우 로그 파일에서 GRANT 또는 PASSWORD와 같은 민감한 단어를 찾아 암호의 일반 텍스트를 쉽게 찾을 수 있습니다.

테이블 파일에 대한 읽기 액세스도 위험하며 파일을 훔쳐서 MySQL이 테이블의 내용을 일반 텍스트로 표시하도록 하는 것은 사소한 일입니다. 다음 단계를 수행할 수 있습니다.

1. 공식 서버 인터페이스 및 데이터 파일과 다른 포트 및 패키지를 사용하여 다른 호스트 또는 현재 서버 호스트에 새 MySQL 배포판을 설치합니다.

2. 도난당한 테이블의 해당 파일을 새로운 서비스 데이터베이스 디렉터리의 test 디렉터리에 복사합니다

3. 그런 다음 범죄 서버를 시작하고 다음에서 도난당한 테이블의 내용에 액세스할 수 있습니다. 할 것이다.

Unix에서 적절한 데이터베이스 디렉터리 권한을 설정하세요.

이러한 보안 허점을 제거하려면 데이터베이스 디렉터리와 그 안에 있는 모든 파일 및 디렉터리의 소유권을 정렬해야 합니다. 예, 전용 계정만 가능합니다. 서버를 시작하면 액세스할 수 있습니다. 단계는 다음과 같습니다.

1. 루트 사용자로 전환

$su

 2. 데이터베이스 디렉터리와 그 안의 모든 파일 디렉터리의 소유권을 서버를 실행하는 계정으로 설정합니다. 이 책에서는 이 계정을 항상 mysql로 ​​가정하고 모든 그룹을 루트 그룹으로 설정합니다

 % chown –R mysql:root DATADIR

3. 데이터베이스 디렉터리와 그 안에 있는 모든 파일 디렉터리의 권한을 소유자만 읽고 쓸 수 있도록 수정합니다.

%chmod –R go-rwx DATADIR

NT 시스템에서 적절한 데이터베이스 디렉터리 권한을 설정합니다.

NT 시스템에서 데이터베이스 디렉터리의 보안은 비교적 간단할 수 있습니다.

독자는 다음과 같이 생각할 수 있습니다. 모든 디렉토리 파일을 특정 계정으로만 변경 관리자 등의 계정을 읽고 쓸 수 있습니다. 그러나 여기에는 관리자 계정에서 독립 서버를 수동으로 시작할 수 있다는 문제가 있는데, mysql 시스템 서비스를 자동으로 시작시키는 방법이 불가능할 경우에는 데이터베이스 디렉터리도 읽을 수 있도록 하고, 관리자 그룹의 사용자가 쓸 수 있습니다. 이러한 방식으로 MySQL 서버는 시스템 서비스 방법을 사용하여 자동으로 시작되거나 net start mysql을 사용하여 모든 계정에서 시작할 수 있습니다.

또 다른 문제는 관리자가 아닌 그룹 사용자이거나 네트워크에서 데이터베이스 디렉터리에 대한 읽기 권한이 없기 때문에 데이터베이스 연결을 설정할 수 없다는 점입니다. 쓰기 권한도 필요합니다. 해결책은 SYSTEM 그룹의 사용자가 데이터베이스 디렉터리를 읽고 쓸 수 있도록 허용하는 것입니다.

라이센스 및 비용상의 이유로 일반적으로 Linux 서버에서 MySQL을 사용하고 테스트 또는 데이터 입력 작업을 위해 Windows 플랫폼에서 사용하는 것이 좋습니다. 하지만 Windows에서 사용하려면 이 섹션의 일부 내용에 주의하면 됩니다.

보안에 영향을 미치는 MySQL 옵션

다음 mySQL 옵션은 보안에 영향을 미칩니다.

--secure

gethostbyname() 시스템 호출에서 반환된 IP 번호 확인되어 원래 호스트 이름으로 다시 확인됩니다. 이렇게 하면 외부인이 다른 호스트를 가장하여 액세스하는 것이 더 어려워집니다. 이 옵션은 또한 영리한 호스트 이름 확인을 추가합니다. MySQL 3.21에서는 역방향 구문 분석을 수행하는 데 시간이 오래 걸리는 경우가 있기 때문에 기본적으로 선택이 해제되어 있습니다. MySQL 3.22에서는 호스트 이름을 캐시하고 이 옵션이 기본적으로 활성화되어 있습니다.

--skip-grant-tables

이 옵션을 사용하면 서버가 권한 시스템을 전혀 사용하지 않게 됩니다. 이는 모든 사람에게 모든 데이터베이스에 대한 전체 액세스 권한을 부여합니다. (mysqladmin reload를 실행하여 실행 중인 서버에 다시 부여 테이블 사용을 시작하도록 지시할 수 있습니다.)

  --skip-name-resolve

호스트 이름 해결되지 않았습니다. 인증 테이블의 모든 Host 열 값은 IP 번호 또는 localhost여야 합니다.

  --skip-networking

  네트워크에서 TCP/IP 연결을 허용하지 않습니다. mysqld에 대한 모든 연결은 Unix 소켓을 통해 이루어져야 합니다. MIT-pthreads 패키지는 Unix 소켓을 지원하지 않기 때문에 이 옵션은 MIT-pthreads를 사용하는 시스템에는 적합하지 않습니다.


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.