6.2 MySQL 권한 시스템
MySQL 권한 시스템의 주요 역할은 특정 호스트에서 연결하는 사용자를 인증 할 수 및 사용자를 SELECT
, INSERT
, UPDATE
, DELETE
등의 데이터베이스의 권한에 연결할 수 있습니다. 추가 기능으로 익명 사용자를 가지는 것, 그리고 관리 작업과 LOAD DATA INFILE
등의 MySQL의 특정 기능에 대한 권한을 부여 할 등이 있습니다.
MySQL 권한 시스템에서는 실행되지 않을 수도 있습니다.
특정 사용자의 액세스를 거부하도록 명시 적으로 지정할 수 없습니다. 즉, 사용자가 명시 적으로 일치하고 연결을 거부 할 수 없습니다.
사용자가 데이터베이스 테이블을 만들거나 삭제할 수 있지만 데이터베이스 자체를 생성하거나 삭제할 수없는 권한을 사용자가 가질 수 있도록 지정할 수 없습니다.
비밀번호는 계정에 대해 전체적으로 적용됩니다. 데이터베이스, 테이블, 루틴 등의 특정 오브젝트에 패스워드를 연결할 수 없습니다.
MySQL 권한 시스템의 사용자 인터페이스는 CREATE USER
, GRANT
, REVOKE
등의 SQL 문으로 구성됩니다. 섹션 13.7.1 "계정 관리 명령문" 을 참조하십시오.
내부적으로 서버는 권한 정보를 mysql
데이터베이스 (즉 mysql
이라는 데이터베이스)의 부여 테이블에 저장합니다. MySQL 서버는 이러한 테이블의 내용을 시작할 때 메모리에 읽고 부여 테이블의 인 메모리 복사에 따라 액세스 제어를 결정합니다.
MySQL 권한 시스템은 모든 사용자는 자신에게 허용 된 작업 만 수행 할 수 있습니다. 사용자로 MySQL 서버에 연결하면 사용자 ID는 연결된 호스트 및 지정한 사용자 이름에 의해 결정됩니다. 연결 후 요청을 실행하면 시스템은 사용자 ID와 사용자가 수행 할 작업에 따라 권한을 부여합니다.
MySQL에서는 호스트 이름과 사용자 이름을 모두 고려하여 사용자를 식별하지만 이것은 특정 사용자 이름이 모든 호스트에서 동일인에 속한다고 가정하는 근거가 없기 때문입니다. 예를 들어, office.example.com
에서 접속 한 사용자 joe
는 home.example.com
에서 접속 한 joe
와 동일 인물이라고는 할 수 없습니다. MySQL은 우연히 동일한 이름을 가진 다른 호스트의 사용자를 식별 할 수 있도록함으로써이를 처리합니다. 즉, office.example.com
에서 joe
의한 연결에 대해 하나의 권한 세트를 부여하고 home.example.com
에서 joe
의한 연결에 대해 다른 권한 세트를 제공 할 수 있습니다. 특정 계정이 가지는 권한을 표시하려면 SHOW GRANTS
문을 사용합니다. 예 :
SHOW GRANTS FOR 'joe'@'office.example.com'; SHOW GRANTS FOR 'joe'@'home.example.com';
서버에 연결하는 클라이언트 프로그램을 실행할 때 MySQL 접근 제어는 두 단계가 있습니다.
1 단계 : 서버는 사용자 ID 및 올바른 암호를 지정하여 ID를 검증 할 수 있을지 여부에 따라 연결을 허용할지 거부합니다.
2 단계 : 연결되어있는 경우 서버는 사용자가 발행하는 각 문을 검사하여 문을 실행하기에 충분한 권한이 사용자에게 있는지 여부를 판별합니다. 예를 들어 데이터베이스의 테이블에서 레코드를 선택하거나 데이터베이스의 테이블을 삭제하거나하려고하면 서버는 사용자에게 그 테이블의 SELECT
권한이 있는지 또는 데이터베이스의 DROP
권한이 있는지 여부를 확인합니다 .
각 단계에서 발생하는 동작에 대한 자세한 설명은 섹션 6.2.4 "액세스 제어 1 단계 : 연결 확인" 및 섹션 6.2.5 "액세스 제어, 2 단계 : 요청 확인" 을 참조하십시오.
사용자 연결 (사용자 자신 또는 다른 사람에 의해) 권한이 변경된 경우 그 변경은 사용자가 발행하는 다음 문에서 반드시 즉시 적용되는 것은 아닙니다. 서버가 부여 테이블을 다시로드 조건에 대한 자세한 내용은 섹션 6.2.6 "권한 변경이 활성화되는시기" 를 참조하십시오.
보안 관련 일반적인 조언 내용은 6.1 절 "일반적인 보안 문제" 를 참조하십시오. 권한과 관련된 문제 진단에 대한 도움은 섹션 6.2.7 "액세스 거부 오류의 원인" 을 참조하십시오.