반응형

mysql 유저 계정에 특정 테이블에 권한 추가를 하려고 기존권한을 복붙 하려는데 

 

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, EXECUTE ON xxxxDB.TB_TEMP_BACKUP TO 'testapp'@'%';

 

ERROR 1144 (42000): Illegal GRANT/REVOKE command; please consult the manual to see which privileges can be used


에러가 나서 좀 확인해보니 나머지는 상관없는데 EXECUTE 권한이 전역권한이라 특정테이블에서만 실행할 수는 없다고 한다.


EXECUTE 권한에 대해 알아본다.

EXECUTE : 저장 루틴(저장 프로시저 및 함수)을 실행하는 명령문을 사용할 수 있습니다.
참조 : https://dev.mysql.com/doc/refman/5.7/en/privileges-provided.html

함수나 프로시저를 실행하는 명령어였다. 
(그럼 특정테이블에 EXECUTE 권한 넣는 것은 당연히 안되는 것)

그렇다면 특정함수만 권한넣을 수 있는지와 전역권한이라니까

2가지를  한번 테스트 해본다.

테스트시작)


1.  특정테이블에 권한 추가

mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, EXECUTE ON xxxxDB.TB_TEMP_BACKUP TO 'testapp'@'%';
ERROR 1144 (42000): Illegal GRANT/REVOKE command; please consult the manual to see which privileges can be used
/* EXECUTE 때문에 안됨 
xxxxDB.TB_TEMP_BACKUP (DB스키마명.테이블명)
*/



mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON xxxxDB.TB_TEMP_BACKUP to 'testapp'@'%';
Query OK, 0 rows affected (0.04 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.04 sec)
/* EXECUTE 빼고는 특정테이블에 권한할당이 가능한 것을 확인함 */



2. EXECUTE 권한 테스트



2-1) 특정 함수에 권한 추가

 

mysql> GRANT EXECUTE ON xxxxDB.fn_xxxxxxxx to 'testapp'@'%';
ERROR 1144 (42000): Illegal GRANT/REVOKE command; please consult the manual to see which privileges can be used
/* 함수인데 왜 할당이 안되는것일까? */


mysql> GRANT EXECUTE ON FUNCTION xxxxDB.fn_xxxxxxxx to 'testapp'@'%';
Query OK, 0 rows affected (0.03 sec)
/* 실행대상이 ON FUNCTION 임을 명시해줘야 함 */


mysql> flush privileges;
Query OK, 0 rows affected (0.03 sec)



2-2) 전역권한 추가

 

mysql> GRANT EXECUTE ON xxxxDB.* to 'testapp'@'%';
Query OK, 0 rows affected (0.04 sec)
/* 전역권한이라 DB스키마명만 명시하고 나머지를 *로 주면 권한추가가 가능하다는 것을 확인함 */


mysql> flush privileges;
Query OK, 0 rows affected (0.04 sec)

 


3.   권한 삭제  (추가했으면 삭제도 해봐야지)

 

mysql> REVOKE SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON xxxxDB.TB_TEMP_BACKUP from 'testapp'@'%';
Query OK, 0 rows affected (0.03 sec)


mysql> flush privileges;
Query OK, 0 rows affected (0.03 sec)

 

REVOKE로 권한삭제가 가능한데 GRANT 명령어와 차이는 TO FROM 

끝.

반응형
블로그 이미지

dung beetle

취미는 데이터 수집 직업은 MYSQL과 함께 일하는 DBA의 소소한 일상 이야기

,