Loading...
MySQL 9.5 Reference Manual 9.5의 8.2 Access Control and Account Management의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
8.2.1 Account User Names and Passwords
8.2.2 Privileges Provided by MySQL
8.2.3 Grant Tables
8.2.4 Specifying Account Names
8.2.5 Specifying Role Names
8.2.6 Access Control, Stage 1: Connection Verification
8.2.7 Access Control, Stage 2: Request Verification
8.2.8 Adding Accounts, Assigning Privileges, and Dropping Accounts
8.2.9 Reserved Accounts
8.2.10 Using Roles
8.2.11 Account Categories
8.2.12 Privilege Restriction Using Partial Revokes
8.2.13 When Privilege Changes Take Effect
8.2.14 Assigning Account Passwords
8.2.15 Password Management
8.2.16 Server Handling of Expired Passwords
8.2.17 Pluggable Authentication
8.2.18 Multifactor Authentication
8.2.19 Proxy Users
8.2.20 Account Locking
8.2.21 Setting Account Resource Limits
8.2.22 Troubleshooting Problems Connecting to MySQL
8.2.23 SQL-Based Account Activity Auditing
MySQL은 클라이언트 사용자가 서버에 연결하고 서버가 관리하는 데이터에 접근하도록 허용하는 계정을 생성할 수 있게 해 줍니다. MySQL 권한 시스템의 기본적인 기능은 특정 호스트에서 접속하는 사용자를 인증하고, 그 사용자를
SELECT,
INSERT,
UPDATE,
DELETE와 같은 데이터베이스에 대한 권한과 연관시키는 것입니다. 추가 기능으로는 관리 작업에 대한 권한을 부여하는 기능이 포함됩니다.
어떤 사용자가 연결할 수 있는지를 제어하기 위해 각 계정에는 패스워드와 같은 인증 자격 증명을 할당할 수 있습니다. MySQL 계정에 대한 사용자 인터페이스는
CREATE USER,
GRANT,
REVOKE와 같은 SQL 문으로 구성됩니다. 자세한 내용은
Section 15.7.1, “Account Management Statements”를 참조하십시오.
MySQL 권한 시스템은 모든 사용자가 자신에게 허용된 작업만 수행할 수 있도록 보장합니다. 사용자 여러분이 MySQL 서버에 연결하면, 여러분의 아이덴티티는 _어느 호스트에서 접속하는지_와 _어떤 사용자 이름을 지정하는지_에 의해 결정됩니다. 연결한 후에 요청을 실행하면, 시스템은 여러분의 아이덴티티와 _무엇을 하려 하는지_에 따라 권한을 부여합니다.
MySQL은 여러분을 식별할 때 호스트 이름과 사용자 이름 둘 다를 고려하는데, 이는 주어진 사용자 이름이 모든 호스트에서 동일한 사람에게 속한다고 가정할 이유가 없기 때문입니다. 예를 들어,
office.example.com에서 접속하는 사용자
joe는
home.example.com에서 접속하는 사용자
joe와 동일한 사람일 필요가 없습니다. MySQL은 다른 호스트에서 동일한 이름을 가진 사용자를 구분할 수 있게 함으로써 이를 처리합니다.
예를 들어
office.example.com에서 접속하는
joe에 대해 하나의 권한 집합을 부여하고,
home.example.com에서 접속하는
joe에 대해 다른 권한 집합을 부여할 수 있습니다. 특정 계정이 가진 권한을 보려면
SHOW GRANTS 문을 사용하십시오. 예를 들면 다음과 같습니다:
1SHOW GRANTS FOR 'joe'@'office.example.com'; 2SHOW GRANTS FOR 'joe'@'home.example.com';
내부적으로 서버는 권한 정보를 mysql 시스템 데이터베이스의 그랜트 테이블에 저장합니다. MySQL 서버는 시작할 때 이 테이블의 내용을 메모리로 읽어 들이고, 메모리 상의 그랜트 테이블 복사본을 기반으로 접근 제어 결정을 내립니다.
MySQL 접근 제어는 클라이언트 프로그램이 서버에 연결할 때 두 단계로 진행됩니다:
Stage 1: 서버는 여러분의 아이덴티티와, 올바른 패스워드를 제공하여 자신의 아이덴티티를 검증할 수 있는지 여부에 따라 연결을 허용하거나 거부합니다.
Stage 2: 연결할 수 있다고 가정하면, 서버는 여러분이 실행하는 각 문을 검사하여 이를 수행하기에 충분한 권한이 있는지를 확인합니다. 예를 들어 데이터베이스의 테이블에서 행을 선택하려 하거나 데이터베이스에서 테이블을 drop하려 하면, 서버는 해당 테이블에 대한
SELECT 권한 또는 데이터베이스에 대한
DROP 권한이 있는지를 확인합니다.
각 단계에서 어떤 일이 일어나는지에 대한 더 자세한 설명은 Section 8.2.6, “Access Control, Stage 1: Connection Verification” 및 Section 8.2.7, “Access Control, Stage 2: Request Verification”를 참조하십시오. 권한 관련 문제를 진단하는 데 도움이 필요하면 Section 8.2.22, “Troubleshooting Problems Connecting to MySQL”를 참조하십시오.
여러분의 권한이 (여러분 자신 또는 다른 사람에 의해) 연결된 상태에서 변경되더라도, 그 변경 사항이 여러분이 다음에 실행하는 문에 즉시 적용되지 않을 수 있습니다. 서버가 어떤 조건에서 그랜트 테이블을 다시 로드하는지에 대한 자세한 내용은 Section 8.2.13, “When Privilege Changes Take Effect”를 참조하십시오.
MySQL 권한 시스템으로는 할 수 없는 작업이 몇 가지 있습니다:
특정 사용자에 대해 명시적으로 접근을 거부하도록 지정할 수 없습니다. 즉, 특정 사용자를 명시적으로 매치한 다음 연결을 거부할 수는 없습니다.
사용자가 데이터베이스 내에서 테이블을 생성하거나 drop할 권한은 있지만 데이터베이스 자체를 생성하거나 drop할 권한은 갖지 못하도록 지정할 수 없습니다.
패스워드는 계정 전체에 전역적으로 적용됩니다. 데이터베이스, 테이블, 루틴과 같은 특정 객체에 패스워드를 연결할 수는 없습니다.
8.1.7 Client Programming Security Guidelines
8.2.1 Account User Names and Passwords