이 글에서는 각 권한이 작동할 수 있는 트랜잭션과 작동 권한에 대한 몇 가지 일반적인 명령문을 포함하여 MySQL의 권한을 주로 소개합니다. 모든 사람에게 도움이 되기를 바랍니다.
1. 서문
많은 기사에서는 데이터베이스의 권한이 최소 권한의 원칙을 기반으로 한다고 말합니다. 이 문장 자체는 틀린 것이 아니지만 공허한 이야기입니다. 최소 권한으로 인해 이 작업은 너무 추상적이고, 필요한 권한이 무엇인지 정확히 알지 못하는 경우가 많습니다. 요즘 많은 MySQL 작업에서는 루트 계정을 사용합니다. 루트 권한을 사용하는 것이 너무 안전하지 않다는 사실을 모든 사람이 모르는 것은 아니지만, 안전하면서도 정상적인 작동을 보장하기 위해 어떤 종류의 권한을 부여해야 하는지 모르는 사람이 많습니다. 따라서 이 기사에서는 이 경우 보안 mysql을 간단하게 구성할 수 있는 방법을 고려하는 것에 대해 자세히 설명합니다. 참고: 이 글의 테스트 환경은 mysql-5.6.4
2. Mysql 권한 소개
mysql에는 권한을 제어하는 테이블이 4개 있는데, user 테이블, db 테이블, tables_priv 테이블, columns_priv 테이블이다.
mysql 권한 테이블 확인 과정은 다음과 같습니다.
1. 먼저 사용자 테이블의 Host, User, Password 3개 필드에서 연결된 IP, 사용자 이름, 비밀번호가 있는지 확인합니다. 검증이 통과되었습니다.
2. 본인인증 통과 후 user, db, tables_priv, columns_priv 순으로 권한을 부여하고 검증합니다. 즉, 먼저 전역 권한 테이블 user를 확인하세요. user의 해당 권한이 Y이면 이 사용자의 모든 데이터베이스에 대한 권한은 Y이고, N이면 db, tables_priv, columns_priv가 더 이상 확인되지 않습니다. db 테이블 사용자에 해당하는 특정 데이터베이스, db에서 Y 권한을 얻습니다. db의 권한이 N인 경우 tables_priv에서 데이터베이스에 해당하는 특정 테이블을 확인하고 테이블에서 Y 권한을 얻습니다. 곧.
3. mysql에는 어떤 권한이 있나요?
4. 데이터베이스 수준의 권한 분석(db 테이블)
5. MySQL 보안 구성 계획
1 제한 mysql 포트에 접속하는 IP
Windows는 Windows 방화벽이나 ipsec을 통해 제한할 수 있고, Linux는 iptables를 통해 제한할 수 있습니다.
2 mysql 포트 수정
Windows에서는 구성 파일 my.ini를 수정하고, Linux에서는 구성 파일 my.cnf를 수정하면 됩니다.
3 모든 사용자에 대해 강력한 비밀번호를 설정하고 해당 계정의 액세스 IP를 엄격하게 지정합니다.
mysql에서는 사용자의 액세스 IP를 사용자 테이블에서 지정할 수 있습니다.
4 루트 권한이 있는 계정 처리
설정하는 것이 좋습니다. 루트 계정에 대한 강력한 비밀번호, 로컬 로그인만 허용하도록 지정
5 로그 처리
필요한 경우 쿼리 로그를 켤 수 있으며 쿼리 로그에는 로그인 및 쿼리 문이 기록됩니다.
6 mysql 프로세스 실행 계정
Windows에서 mysql 계정을 실행하기 위해 로컬 시스템을 사용하는 것은 금지되어 있습니다. 네트워크 서비스를 사용하거나 직접 새 계정을 만드는 것을 고려할 수 있지만 mysql 프로그램이 있는 디렉터리에 대한 읽기 권한을 부여해야 합니다. 데이터 디렉터리를 찾아 읽고 쓰기 권한을 부여합니다. Linux에서는 새 mysql 계정을 만들고 설치 중에 mysql 계정으로 실행할 mysql을 지정하여 프로그램이 있는 디렉터리에 읽기 권한을 부여하고 해당 디렉터리에 읽기 및 쓰기 권한을 부여합니다. 데이터가 위치한 디렉토리.
7 mysql 실행 계정에 대한 디스크 권한
1) mysql 실행 계정에는 프로그램이 있는 디렉터리에 대한 읽기 권한과 데이터 디렉터리에 대한 읽기 및 쓰기 권한이 부여되어야 합니다.
2) 쓰기 및 실행 다른 디렉토리, 특히 웹사이트에 대한 권한은 허용되지 않습니다.
3) cmd, sh 및 기타 프로그램에 대한 mysql 실행 계정의 실행 권한을 취소합니다.
8 웹사이트에서 사용하는 mysql 계정을 처리하는 방법
새 계정을 만들고 해당 계정에 사용된 데이터베이스의 모든 권한을 부여하세요. 이를 통해 웹사이트가 해당 데이터베이스를 모두 운영할 수 있을 뿐만 아니라 해당 계정이 과도한 권한으로 인해 보안에 영향을 미치지 않도록 할 수 있습니다. 단일 데이터베이스에 대한 모든 권한이 부여된 계정에는 슈퍼, 프로세스, 파일 및 기타 관리 권한이 없습니다. 물론, 내 웹사이트에서 어떤 권한이 필요한지 명확하게 알 수 있다면 더 많은 권한을 부여하지 않는 것이 좋습니다. 게시자는 웹사이트에 어떤 권한이 필요한지 모르는 경우가 많기 때문에 위 구성만 권장합니다. 그리고 제가 말하는 것은 일반적인 것입니다. 특히, 머신이 많지 않고 소수만 있을 때, 구체적인 제안사항은 위의 표를 참조하시기 바랍니다.
9 쓸모없는 데이터베이스 삭제
테스트 데이터베이스에는 새로 생성된 계정에 대한 기본 권한이 있습니다
6. mysql 침입 및 권한 상승 분석 및 예방 조치
일반적으로 mysql 권한을 상승시키는 방법에는 여러 가지가 있습니다.
1 udf 권한 높이기
이 방법의 핵심은 dll 파일을 가져오는 것입니다. 개인적으로 프로세스 계정의 디렉터리에 대한 쓰기 권한이 합리적으로 제어되는 한 dll 파일을 가져오는 것을 방지할 수 있다고 생각합니다. 프로세스 계정의 권한이 충분히 낮으면 계정 추가 등 위험도가 높은 작업을 수행할 수 없습니다.
2 시작 파일 쓰기
이 방법은 위와 동일하지만 디렉터리에 대한 프로세스 계정의 쓰기 권한을 합리적으로 제어해야 합니다.
3 루트 계정이 유출된 경우
루트 계정이 제대로 관리되지 않고 루트 계정이 침해된 경우 데이터베이스 정보는 절대 보장되지 않습니다. 그러나 프로세스 계정의 권한과 디스크에 대한 권한이 제어되는 경우 서버는 계정이 손상되지 않도록 계속 보장할 수 있습니다.
4 일반 계정 유출 (위에서 언급했듯이 특정 라이브러리에 대한 모든 권한만 가진 계정)
여기서 언급한 일반 계정은 웹 사이트에서 사용하는 계정을 의미하며, 제가 직접 제공하는 것이 더 편리한 방법입니다. 특정 라이브러리의 모든 권한. 계정 유출에는 웹 서버가 손상된 후 데이터베이스 계정 비밀번호에 대한 주입 및 직접 액세스가 포함됩니다.
이때 해당 데이터베이스 데이터는 보호되지 않으나, 다른 데이터베이스를 위협하지는 않습니다. 또한 여기의 일반 계정에는 파일 권한이 없으며 파일을 디스크로 내보낼 수 없습니다. 물론 현재 프로세스 계정의 권한은 여전히 엄격하게 제어됩니다.
일반 계정에 어떤 권한이 부여되는지는 위 표에서 확인할 수 있습니다. 모든 권한을 라이브러리에 직접 부여하는 것은 실제로 불가능합니다.
7. 보안 구성에 필요한 공통 명령
1. 새 사용자를 생성하고 해당 데이터베이스에 권한을 부여합니다.
grant select,insert,update,delete,create,drop privileges on database.* to user@localhost identified by 'passwd';
grant all privileges on database.* to user@localhost identified by 'passwd';
2. 권한 새로 고침
flush privileges;
3. 권한 표시
show grants;
4. 인증 제거
revoke delete on *.* from 'jack'@'localhost';
5. 사용자 삭제
drop user 'jack'@'localhost';
6. 사용자 이름 변경
rename user 'jack'@'%' to 'jim'@'%';
7. 사용자 비밀번호 변경
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123456');
8. 데이터베이스 삭제 삭제 del r
drop database test;
위 내용은 MySQL의 권한에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!