SQL

MySQL_PRIVILEGES , Role

우당탕탕인생기 2023. 10. 17. 22:17

 

Mysql 의 보안을 위해서라도 사용자마다 최소한의 권한을 부여하는것은 중요하다.

 

이에 권한을 부여하는 해보도록 하자.

 

우선 간단한데 test 라는 유저를 만들겠다.

create user 'test'@'%' identified by 'password' ;

권한을 따로 부여하지 않았기 때문에 데이터베이스나 테이블을 볼 수 없다.

 

 

테이블 권한부여

데이터베이스나 칼럼에 대해서는 select, insert, update, delete 을 부여 할 수 있다.

# select , insert , update , delete 권한을 모든 데이터베이스와 테이블에 부여
GRANT SELECT,INSERT,UPDATE,DELETE ON *.* TO 'TEST'@'%' ;


# select 권한만 employee 데이터베이스의 모든 테이블에 부여
GRNAT SELECT ON employee.* TO 'TEST'@'%' ;


# select 권한만 employee 데이터베이스의 name 테이블에 부여
GRANT SELECT ON employee.name TO 'TEST'@'%' ;

 

 

모든 권한부여

grant all privileges on *.* to 'test'@'%' ;

 

권한회수

revoke all on *.* from 'test'@'%' ;

 

꼭 권한을 부여하거나 변경한 이후에는 flush privileges 을 해줘야 한다!


역할

 

mysql 8.0 부터 권한을 묶어서 역할을 사용할 수 있게 되었다.

 

 

역할생성

create role role_read , role_write ;

우선 빈 권한이 있는 role을 생성한 이후 권한을 부여하는 방식이다.

 

 

 

역할에 권한 부여

GRANT SELECT ON *.* TO role_read ;

GRANT INSERT,UPDATE,DELETE ON *.* TO role_write ;

권한을 생성했으면 이제 유저에게 부여하면된다.

 

 

특정 유저에게 역할 부여

GRANT role_read TO 'test'@'%' ;

GRANT role_write TO 'test'@'%' ;

 

** 이렇게 권한을 부여 하여도 권한이 없다고 오류가 뜰 수가 있다. 이때는 해당 역할을 활성화시켜줘야 한다.

SET ROLE 'role_read' ;
SET ROLE 'role_write' ;

 

또는 시스템 변수로 설정하면된다.

SET GLOBAL activate_all_roles_on_login=ON ;
 

'SQL' 카테고리의 다른 글

MySQL_ InnoDB 버퍼 풀  (0) 2023.10.18
MYSQL_ Thread, 쿼리 실행 구조  (0) 2023.10.18
MYSQL_ 사용자 생성 설정  (0) 2023.10.17
프로그래머스_Lv3_헤비 유저가 소유한 장소  (0) 2023.09.19
WINDOW FUCTION (MySQL)  (0) 2023.08.29