MYSQL, GRANT 사용법 (권한 부여)

MYSQL에서 계정에 권한을 부여하려면 GRANT 명령어를 사용합니다. GRANT 명령어는 MYSQL 5.x 버전과 MYSQL 8.x 버전에 약간의 차이가 있습니다. 작성된 내용은 8버전 기준이며, 5버전과의 차이도 알아보겠습니다.

GRANT

기본 구문

GRANT privilege_type ON database_name.table_name TO 'username'@'host';

 

이 명령은 각 위치 별로 어떤 걸 의미하는지 이해하고 써야 합니다. 그래야 권한을 과도하게 주는 것을 경계할 수 있습니다.

  • privilege_type : 사용자에게 부여하려는 권한의 유형입니다. 이 자리에는 SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALL 등이 올 수 있습니다.
  • database_name.table_name : 권한을 부여하려는 데이터베이스과 테이블을 나타냅니다. 예를 들어, TESTDB라는 데이터베이스의 TEST_TABLE이라는 테이블을 명시하는 경우 TESTDB.TEST_TABLE 처럼 쓸 수 있습니다.
  • username, host : 권한을 부여하려는 사용자와 호스트를 나타냅니다.

 

예시)

GRANT ALL PRIVILEGES ON mydb.* TO 'john'@'%';
  • ALL PRIVILEGES : SELECT, INSERT, UPDATE, DELETE, CREATE, DROP 등 모든 권한을 부여합니다.
  • mydb.* : 테이블명이 오는 자리에 *를 사용하면 모든 테이블에 대해 권한을 부여하라는 의미입니다.
  • 'john' : john이라는 사용자를 대상으로 권한을 부여합니다.
  • @ : 구분자입니다.
  • '%' : 모든 클라이언트 호스트에서 해당 계정으로 접근이 가능하다는 의미입니다. 로컬 컴퓨터와 원격 컴퓨터 모두에서 john 사용자는 mydb 데이터베이스에 접근할 수 있습니다. 만약 클라이언트 호스트 자리에 'localhost' 또는 '127.0.0.1'을 표시하면 로컬 호스트에서만 접근이 가능하고, '192.168.1.100'처럼 특정 IP에서만 접근하도록 설정할 수도 있습니다.

 

mysql 5버전과 8버전의 grant 사용 차이

MySQL 5에서는 사용자 생성과 권한 부여를 동시에 수행할 수 있습니다.

GRANT privilege_type ON database_name.table_name TO 'user'@'host' IDENTIFIED BY 'password';

 

반면 MySQL 8에서는 사용자 생성과 권한 부여를 분리해서 수행해야 합니다. 먼저 CREATE USER 문을 사용하여 사용자를 생성한 다음, GRANT 문을 사용하여 권한을 부여합니다.

 

1. 먼저 사용자를 생성하고.

CREATE USER 'user'@'host' IDENTIFIED BY 'password';

 

2. 권한을 부여합니다.

GRANT privilege_type ON database_name.table_name TO 'user'@'host';

 

오류) root 계정에 grant 부여 권한이 없을 때

grant 권한을 부여하려는데 root 계정으로 접속했음에도 아래와 같이 권한이 없다는 오류가 발생할 수 있습니다.

mysql> grant all on *.* to 'root'@'%';
ERROR 1410 (42000): You are not allowed to create a user with GRANT

 

이럴 땐 root 계정을 다시 create 하고 grant 옵션을 부여하면 됩니다.

mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'root123!@#';
Query OK, 0 rows affected (0.04 sec)
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)

 

FLUSH PRIVILEGES 실행이 필요한가?

FLUSH PRIVILEGES 명령은 MySQL 서버에서 캐시된 권한 정보를 다시 로드하고 업데이트된 권한 정보를 적용하는 데 사용됩니다. 따라서 권한 정보를 변경하면 FLUSH PRIVILEGES 명령을 실행하는 것입니다.

 

그러나 MYSQL 5.7 이후 부터는 새로운 권한 정보가 즉시 적용되므로, 이전 버전처럼 FLUSH PRIVILEGES 명령을 실행하지 않아도 됩니다. 다만 명시적으로 FLUSH PRIVILEGES를 실행하는 것은 여전히 권장됩니다.

반응형

댓글

Designed by JB FACTORY