사용자, 권한, 역할

사용자 식별

  • 하나의 계정에는 아이디와 호스트(IP or Hostname)가 함께 사용된다.

  • 모든 외부 컴퓨터에서 접속이 가능한 사용자 계정을 생성하려면 호스트를 ‘%’ 로 설정하면 된다.

  • 동일한 아이디를 가졌지만 호스트가 다른 계정들이 있다면, 좁은 범위의 호스트를 가진 계정을 우선시하게 된다.

시스템 계정과 일반 계정

시스템 계정

  • SYSTEM_USER 권한을 갖고 있는 계정을 의미한다.

  • 계정 관리, 세션에서 실행중인 쿼리 강제 종료, 스토어드 프로그램 생성 시 DEFINER를 타 사용자로 설정하는 등 중요 작업을 수행할 수 있다.

  • DBA가 이 계정을 통해 데이터베이스를 관리하게 된다.

일반 계정

  • SYSTEM_USER 권한을 갖고 있지 않은 계정을 의미한다.

  • mysql.sys, mysql.session, mysql.infoschema 계정은 내부적으로 사용할 목적을 위해 내장해둔 계정이다.

계정 생성 및 변경

  • CREATE USER 명령으로 계정을 생성하고, GRANT 명령으로 권한을 부여할 수 있다.

  • 인증 방식, 비밀번호 옵션(유효 기간, 이력 개수 등), 기본 역할, SSL 옵션, 계정 잠금 여부를 설정하여 생성할 수 있다.

  • Caching SHA-2 Pluggable Authentication 방식을 기본 인증 방식으로 사용한다. SCRAM 인증 방식을 통해 기본적으로 5000번의 해시 함수를 실행하여 결과를 만들고 로그인 요청을 보낸다. 해시 결과값을 메모리에 캐싱하여 성능을 보완한다.

이중 비밀번호

  • 보통 응용 프로그램 서버들은 공용 계정으로 데이터베이스 서버를 사용한다. 이 때 공용 계정의 비밀번호를 변경하면 기존 서비스들에서 접근할 수 없게 되는 문제가 있다.

  • 하나의 계정에 2개의 비밀번호를 동시에 가질 수 있도록 하고, Primary, Secondary로 구분한다.

  • 기존 계정에서 비밀번호를 변경하고자 할 때, ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘new_password’ RETAIN CURRENT PASSWORD 옵션을 사용하면 새로운 비밀번호는 Primary가 되고 기존 비밀번호는 Secondary가 된다.

  • 기존 비밀번호는 ALTER USER ‘root’@’localhost’ DISCARD OLD PASSWORD 명령으로 제거할 수 있다.

권한

글로벌 권한

  • 데이터베이스나 테이블 이외의 객체에 적용되는 권한

객체 권한

  • 데이터베이스나 테이블 제어 시에 필요한 권한

동적 권한

  • MySQL 서버의 컴포넌트나 플러그인이 설치되었을 때 등록되는 권한

  • 백업 관리, 복제 관리, 서버 관리 등 다양한 권한 범위를 나누어 적용할 수 있다.

부여

  • GRANT privilege_list ON db.table TO ‘user’@’host’; 형태로 권한을 부여할 수 있다.

    • privilege_list에는 , 를 통해 여러 권한을 명시할 수 있다.

    • ON 절에서는 어떤 데이터베이스의 어떤 오브젝트에 권한을 부여할 지 결정한다.

  • 글로벌 권한의 경우 특정 데이터베이스나 테이블에 부여될수 없으므로 항상 ON *.* 를 사용해야 한다.

  • DB 권한의 경우 특정 DB 또는 전체 DB에 대해 부여할 수 있다. 하지만 테이블 단위까지는 부여할 수 없다.

  • 테이블 권한의 경우 특정 데이터베이스나 테이블 단위로 부여할 수 있다.

  • 칼럼 별 권한도 부여 가능하다. INSERT, UPDATE, SELECT 권한만 부여 가능하다.

    • GRANT SELECT,INSERT,UPDATE(column_name) ON db.table TO ‘user’@’host’;

    • 다만 이렇게 하나라도 칼럼 별 권한을 부여하는 경우 모든 칼럼에 대해 권한 체크를 하므로 전체적인 성능이 저하될 수 있다.

    • 따라서 권한을 분리하고자 하는 칼럼만으로 구성된 별도의 뷰를 만들어 권한을 부여하는 것이 낫다.

역할

  • 역할을 생성하고 권한을 부여한 후, 계정마다 역할을 부여할 수 있다.

  • activate_all_roles_on_login 옵션을 true로 두면 사용자 로그인 시 자동으로 역할이 활성화되지만, 기본적으로 false이므로 역할 활성화를 별도로 해주어야 한다.

Last updated