MySQL의 사용자는 사용자 계정 + 접속 지점(호스트명, 도메인, IP주소 등)로 식별된다. 항상 아이디와 호스트를 함께 명시해야 한다. svc_id@127.0.0.1
모든 IP 또는 모든 호스트명을 의미하는 %를 사용할 수 있다. svc_id@%
권한이나 계정 정보에 대해 MySQL은 범위가 가장 작은 것을 항상 먼저 선택한다.
시스템 계정은 DB서버 관리자를 위한 계정, 일반 계정은 응용 프로그램이나 개발자를 위한 계정.
계정 생성은 create user, 권한 부여는 grant 명령으로 구분해서 실행.
create user 명령에 다음과 같은 옵션을 줄 수 있음.
MySQL 서버에서 비밀번호 유효성 체크 규칙을 적용하려면 validate_password 컴포넌트 이용하면 됨.
MySQL에서 이중 비밀번호란, 2개의 비밀번호 중 하나만 일치하면 로그인이 통과되는 것.
이중 비밀번호를 사용하려면 기존 비밀번호 변경 구문에 RETAIN CURRENT PASSWORD 옵션 추가하면 됨.
8.0 버전부터는 동적 권한이 추가됨. 정적 권한은 MySQL 서버 소스코드에 고정적으로 명시돼 있는 권한. 동적 권한은 MySQL 서버가 시작되면서 동적으로 생성하는 권한.
GRANT previllege_list ON db.table TO ‘user’@’host’;
GRANT {권한} ON {권한을 부여할 오브젝트} TO {권한을 부여할 대상 사용자};
권한을 묶어서 역할을 사용할 수 있음.
CREATE ROLE 명령어 이용하여 역할을 생성하고, GRANT 명령으로 각 역할에 대해 권한을 부여한다.
역할을 생성하고(CREATE ROLE), 역할에 권한을 부여하고(GRANT), 계정을 생성하고(CREATE USER), 계정에 역할을 부여한다(GRANT).
계정이 역할을 사용할 수 있게 하려면 SET ROLE 명령을 실행해 해당 역할을 활성화해야 한다. 이는 재로그인할 때마다 풀릴 수 있는데, activate_all_roles_on_login 시스템 변수를 on으로 설정하면 풀리지 않는다.
SET GLOBAL activate_all_roles_on_login =ON;
역할과 계정은 mysql DB의 user 테이블에서 구분 없이 관리된다. 그럼에도 CREATE ROLE, CREATE USER 명령이 구분되어 있는 이유는, 데이터베이스 관리의 직무를 분리할 수 있게 하여 보안을 강화하는 용도로 사용하기 위해서다.