Real My SQL 스터디/사용자 및 권한

권한

webmaster 2026. 2. 28. 18:37

글로벌 권한과 객체 권한

  • 데이터베이스나 테이블 이외의 객체에 적용되는 권한을 글로벌 권한이라고 한다.
  • 데이터베이스나 테이블을 제어하는 데 필요한 권한을 객체 권한이라고 한다.
    • 객체 권한은 Grant 명령으로 권한을 부여할 때 반드시 특정 객체를 명시해야 한다.
  • 예외적으로 ALL은 글로벌과 객체 권한 두 가지 용도로 사용될 수 있다
    • 특정 객체에 ALL 적용 시, 해당 객체에 적용될 수 있는 모든 객체권한을, 글로벌 ALL 적용시, 글로벌 수준에서 가능한 모든 권한을 부여하게 된다.

정적 권한과 동적 권한

정적권한: https://dev.mysql.com/doc/mysql-security-excerpt/8.0/en/privileges-provided.html#privileges-provided-static

 

MySQL :: Security in MySQL :: 4.2 Privileges Provided by MySQL

Security in MySQL  /  Access Control and Account Management  /  Privileges Provided by MySQL 4.2 Privileges Provided by MySQL The privileges granted to a MySQL account determine which operations the account can perform. MySQL privileges differ in the

dev.mysql.com

  • 정적 권한은 MySQL 서버의 소스코드에 고정적으로 명시돼 있는 권한을 의미한다.

동적 권한: https://dev.mysql.com/doc/mysql-security-excerpt/8.0/en/privileges-provided.html#privileges-provided-dynamic

 

MySQL :: Security in MySQL :: 4.2 Privileges Provided by MySQL

Security in MySQL  /  Access Control and Account Management  /  Privileges Provided by MySQL 4.2 Privileges Provided by MySQL The privileges granted to a MySQL account determine which operations the account can perform. MySQL privileges differ in the

dev.mysql.com

  • MySQL 서버가 시작되면서 동적으로 생성되는 권한을 의미한다.
  • MySQL5.7 버전까지는 SUPER 권한이 데이터베이스를 관리하기 위한 필수 권한이었다면, MySQL 8.0 이후부터는 잘게 쪼개어져 동적 권한으로 분산됐다.
    • 백업 관리자와 복제 관리자 개별로 꼭 필요한 권한만 부여할 수 있게 되었다.

Grant

GRANT SUPER ON *.* TO 'user'@'localhost'

-- 글로벌 권한 *.*
GRANT SUPER ON *.* TO 'user'@'localhost' 

-- DB 권한
GRANT EVENT ON *.* TO 'user'@'localhost' 
GRANT EVENT ON employees.* TO 'user'@'localhost'


-- 테이블 권한
GRANT SELECT, INSERT, UPDATE, DELETE ON *.* TO 'user'@'localhost' 
GRANT SELECT, INSERT, UPDATE, DELETE ON employees.* TO 'user'@'localhost' 
GRANT SELECT, INSERT, UPDATE, DELETE ON employees.department TO 'user'@'localhost'

-- 특정 컬럼
GRANT SELECT, INSERT, UPDATE(dept_name) ON employees.department TO 'user'@'localhost'
  • 사용자에게 권한을 부여할 때 사용하는 명령어로, 각 권한의 특성에 따라 Grant 명령의 on 절에 명시되는 오브젝트의 내용이 바뀌어야 한다.
  • MySQL 8.0 이후 버전부터는 존재하지 않는 사용자에게 Grant 명령 실행 시 오류가 발생한다.
  • Grant Option 권한은 다른 권한과 달리 Grant 명령 마지막에 With Grant Option을 명시해서 부여한다.
  • privilige_list에는 구분자를 사용해, 권한 여러 개를 동시에 명시할 수 있다.
  • to 키워드 뒤에는 권한을 부여할 대사 사용자를 명시한다.
  • on 키워드 뒤에는 어떤 DB 오브젝트에 권한을 부여할지 결정할 수 있다.
    • 글로벌 권한은 항상 *.*를 사용한다.(MySQL 전체 서버)
    • DB 권한은 특정 DB에 대해서, 부여하거나 서버에 존재하는 모든 DB에 권한을 부여할 수 있다.
      • 단 테이블까지 명시는 불가능하다.
    • 테이블 권한은 모든 DB, 특정 DB, 특정 DB의 특정 테이블에 대해서 권한을 부여할 수 있다.
      • 테이블의 특정 칼럼에 대해서만 권한을 부여하는 경우에는 INSERT, UPDATE, SELECT 3가지만 부여할 수 있으며, 각 권한 뒤에 칼럼을 명시하는 형태로 부여한다.
      • 테이블과 특정 컬럼 단위 권한은 잘 사용하지 않는데, 권한 설정 시, 나머지 모든 테이블의 모든 컬럼에 대해서도 권한 체크를 해야하기 때문에 성능에 영향을 끼칠 수 있기 때문이다.
      • 컬럼 단위 접근이 꼭 필요하다면 별도의 뷰를 만들어 사용하는 방법도 있다(뷰의 컬럼에 대한 권한 체크는 하지 않고 뷰 자체에 대한 권한만 체크하기 때문)

권한 설정 관련 테이블 정보

구분 저장 테이블 설명
정적 권한 mysql.user 계정 정보, 계정이나 역할에 부여된 글로벌 권한
mysql.db 계정이나 역할에 DB 단위로 부여된 권한
mysql.tables_priv 계정이나 역할에 테이블 단위로 부여된 권한
mysql.columns_priv 계정이나 역할에 컬럼 단위로 부여된 권한
mysql.procs_priv 계정이나 역할에 스토어드 프로그램 단위로 부여된 권한
동적 권한 mysql.global_grants 계정이나 역할에 부여되는 동적 글로벌 권한

 

'Real My SQL 스터디 > 사용자 및 권한' 카테고리의 다른 글

역할  (0) 2026.03.02
비밀번호 관리  (0) 2026.02.26
사용자 계정 관리  (0) 2026.02.23
사용자 식별  (0) 2026.02.22