MySQL은 작은 크기, 빠른 속도, 낮은 총 소유 비용, 특히 오픈 소스 기능으로 인해 우리가 일반적으로 사용하는 가장 경제적이고 저렴한 데이터베이스입니다. 가장 실용적인 결과를 얻으려면 많은 사용자가 애플리케이션의 인증 원칙에 대해 잘 모르는 것이 사실입니다. MySQL은 작은 크기, 빠른 속도, 낮은 총 소유 비용, 특히 오픈 소스 기능으로 인해 우리가 일반적으로 사용하는 가장 경제적이고 저렴한 데이터베이스입니다. 가장 실용적인 결과를 얻으려면 많은 사용자가 애플리케이션의 인증 원칙에 대해 잘 모르는 것이 사실입니다.
서버 재시작 상황
mysqld가 시작되면 모든 승인 테이블 내용이 메모리로 읽혀지고 그 시점부터 적용됩니다.
서버에서 즉시 적용하는 경우
GRANT, REVOKE 또는 SET PASSWORD를 사용하여 인증 테이블을 수정하면 서버가 즉시 이를 알 수 있습니다.
승인 양식 직접 수정
부여 테이블을 수동으로 수정하는 경우(INSERT, UPDATE 등을 사용하여) FLUSH PRIVILEGES 문을 실행하거나 mysqladmin 플러시 권한을 실행하여 서버에 부여 테이블을 다시 로드하도록 지시해야 합니다. 그렇지 않으면 다시 시작하지 않으면 변경 사항이 적용되지 않습니다. 서버.
기존 고객 연결에 미치는 영향
서버가 인증 테이블이 변경되었음을 인지하면 기존 클라이언트 연결은 다음과 같은 영향을 미칩니다.
·테이블 및 열 권한은 클라이언트의 다음 요청에 적용됩니다.
·데이터베이스 권한 변경은 다음 USE db_name 명령에 적용됩니다.
·전역 권한 변경 및 비밀번호 변경은 다음에 클라이언트가 연결할 때 적용됩니다.
위임 원칙
아무리 주의를 기울여도 사용자 권한을 부여할 때 필연적으로 허점이 생길 수 있습니다. 다음 내용이 도움이 되기를 바랍니다. 일반적으로 이러한 규칙을 준수해야 합니다.
루트 사용자만이 인증 테이블을 다시 작성할 수 있는 권한을 가집니다.
루트 사용자를 제외한 다른 사용자에게는 권한 테이블을 다시 작성할 수 있는 권한을 부여하지 마십시오(물론 보안 강화를 위해 관리를 위해 루트 사용자를 대체하기 위해 다른 사용자를 사용할 수 있는 경우). 이로 인해 사용자는 인증 테이블을 덮어써서 기존 권한을 재정의할 수 있습니다. 보안 허점을 만듭니다.
일반적으로 이런 실수를 저지르지 않을 수도 있지만 새 배포판을 설치한 후 초기 인증 테이블을 설치합니다. 이 취약점은 존재하며 현재 승인 양식의 내용을 이해하지 못하면 실수를 할 수 있습니다.
Unix(Linux)에서는 매뉴얼의 지시에 따라 MySQL을 설치한 후 mysql_install_db 스크립트를 실행하여 인증 테이블과 초기 권한을 포함한 mysql 데이터베이스를 구축해야 합니다. Windows에서는 배포판에서 설치 프로그램을 실행하여 데이터 디렉터리와 mysql 데이터베이스를 초기화합니다. 서버도 실행 중이라고 가정합니다.
컴퓨터에 MySQL을 처음 설치하면 mysql 데이터베이스의 인증 테이블이 다음과 같이 초기화됩니다.
·비밀번호를 지정하지 않고 localhost에서 루트로 연결할 수 있습니다. 루트 사용자는 모든 권한(관리 권한 포함)을 가지며 무엇이든 할 수 있습니다. (그런데 MySQL 슈퍼유저와 Unix 슈퍼유저는 이름이 같고 서로 아무런 관련이 없습니다.)
·test라는 데이터베이스와 test_로 시작하는 모든 데이터베이스 이름에 로컬로 연결할 수 있는 사용자에게 익명 액세스가 부여됩니다. 익명 사용자는 데이터베이스에 대해 무엇이든 할 수 있지만 관리 권한은 없습니다.
일반적으로 익명 사용자 기록을 삭제하는 것이 좋습니다.
mysql> 사용자가 있는 곳에서 삭제 User="";
한 단계 더 나아가 다른 인증 테이블의 익명 사용자도 삭제합니다. 사용자 열이 있는 테이블은 db, tables_priv 및 columns_priv입니다.
또한 루트 사용자의 비밀번호를 설정하십시오.
사용자, 비밀번호 및 호스트 설정 정보
·모든 MySQL 사용자에 대해 비밀번호를 사용하십시오.
other_user에 비밀번호가 없으면 누구나 mysql -u other_user db_name을 사용하여 다른 사람으로 로그인할 수 있다는 점을 기억하십시오. 클라이언트/서버 애플리케이션의 경우 클라이언트가 사용자 이름을 지정하는 것이 일반적입니다. 실행하기 전에 다음과 같이 mysql_install_db 스크립트를 편집하여 모든 사용자의 비밀번호를 변경하거나 MySQL 루트 비밀번호만 변경할 수 있습니다.
쉘> mysql -u 루트 mysql
mysql> 사용자 업데이트 SET Password=PASSWORD('new_password')
-> 사용자='루트';
mysql> FLUSH 권한;