본문 바로가기
개발이야기/Error Note

[MariaDB]Error Code: 1221. Incorrect usage of DB GRANT and GLOBAL PRIVILEGES

by dev.josh 2020. 7. 5.
반응형

RDS MariaDB 인스턴스, 계정을 생성하고

 

 

mysql> CREATE USER '사용자명'@'%' IDENTIFIED BY '패스워드';

mysql> CREATE USER 'joadmin'@'%' IDENTIFIED BY 'password';

 


생성한 계정을 'A' 테이블에만 접근할 수 있도록 권한을 주려 한다.

 

mysql> GRANT ALL PRIVILEGES ON 테이블명.* TO '사용자명'@'%' IDENTIFIED BY '패스워드' WITH GRANT OPTION;

mysql> GRANT ALL PRIVILEGES ON A.* TO 'joadmin'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;

Error Code: 1221. Incorrect usage of DB GRANT and GLOBAL PRIVILEGES

 

 

 

RDS에서 만들어진 admin계정으로는 ALL (grant 옵션을 제외한 모든 권한) 을 부여 할 수 없었다.

 

해서 RDS에서 마스터 사용자를 생성할때 권한을 개별로 부여하는 메뉴얼을 참고하여 쿼리문을 수정해 보았다.

mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER ON 테이블명.* TO '사용자명'@'%' WITH GRANT OPTION;

mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER ON A.* to 'joadmin'@'%'

Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ...  

 

syntax 오류가 나왔다..

 

 

 

찾아보니 SHOW DATABASES,  REPLICATION SLAVE, REPLICATION CLIENT, CREATE USER 옵션은 글로벌 옵션이기 때문에 테이블명.* 에서 사용하지 못하고 *.* (전체) 를 타겟으로만 사용 가능했다.

 

개별 권한에서 SHOW DATABASES,  REPLICATION SLAVE, REPLICATION CLIENT, CREATE USER 옵션을 제거하면 정상 동작했다.

 

mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON 테이블명.* to '사용자명'@'%'

mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON A.* to 'joadmin'@'%'

해당 계정으로 DB에 접근하여 show databases; 명령어를 사용하면 해당 계정이 접근 가능한 스키마 목록으로 접근 권한을 확인 할 수있다.

mysql> show databases;

 

 

 

참고자료

https://aws.amazon.com/ko/premiumsupport/knowledge-center/duplicate-master-user-mysql/

 

RDS MySQL에서 마스터 사용자 권한을 가진 다른 사용자 생성

MySQL을 실행하는 RDS DB 인스턴스에는 마스터 사용자가 한 명만 있을 수 있지만 마스터 사용자와 동일한 권한을 가진 새 사용자를 생성할 수 있습니다. 마스터 권한이 있는 새 사용자를 생성하려��

aws.amazon.com

 

https://mariadb.com/kb/en/grant/

 

GRANT

Create accounts and set privileges or roles.

mariadb.com

 

반응형