MySQL은 사용자에게 저장 프로세스 정의 보기 권한을 부여할 수 있습니까

5324 단어
다른 RDBMS에서는 어떤 저장 프로세스(PROCEDURE) 정의를 볼 수 있는 권한을 사용자에게 줄 수 있다. 예를 들어 SQL Server에서 ProcedureName 정의를 볼 수 있는 권한을 Usera에게 따로 수여할 수 있다.
 
GRANT VIEW DEFINITION ON ProcedureName TO UserA; --구체적인 저장 프로세스 이름과 계정으로 바꾸다
 
그렇다면 MySQL에서 이 기능을 실현할 수 있을까?많은 자료를 찾았지만 이 방면의 기능을 보지 못했다. 공식 문서에는 이런 권한이 없다. 인터넷에는 사용자에게 mysql을 조회할 수 있는 방법이 있다.proc 같은 권한으로 간접적으로 이 기능을 실현합니다
 
 
grant select on mysql.proc to usrname@'xxx.xxx.xxx.xxx';
 
개인이 간단하게 테스트를 해 봤는데, 이렇게 권한을 부여한 후에도 여전히 다른 문제가 있다는 것을 발견하였다.
 
mysql> show create procedure prc_insert;  --          。
ERROR 1305 (42000): PROCEDURE prc_insert does not exist
mysql> show create procedure prc_insert\G; --   
*************************** 1. row ***************************
           Procedure: prc_insert
            sql_mode: STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
    Create Procedure: CREATE DEFINER=`root`@`localhost` PROCEDURE `prc_insert`(in  cnt int)
begin
declare i int;
set i=1;
while i < cnt do
    insert into test(id, name) select i,  CONCAT('name',i) from dual;
    
    set i = i+1;
 
end while;
end
character_set_client: utf8
collation_connection: utf8_general_ci
  Database Collation: latin1_swedish_ci
1 row in set (0.00 sec)
 
ERROR: 
No query specified

 
문제1: 이렇게 권한을 부여하면 모든 데이터베이스 저장 프로세스의 정의(특정한 저장 프로세스뿐만 아니라 특정한 데이터베이스 저장 프로세스의 정의)를 볼 수 있다. 이것은 권한 확대 문제와 관련된다.예를 들어, 스토리지 프로시저 보기 PRCA의 정의 권한, 그러나 그렇게 권한을 부여한 후에 A는 많은 저장 프로세스의 정의를 볼 수 있고 심지어 접근 권한이 없는 데이터베이스에 대한 저장 프로세스의 권한도 볼 수 있다.엄격한 의미에서 말하자면, 이 권한 수여는 불합리할 뿐만 아니라, 문제가 있다.
 
문제2: MySQL 8.0에서 mysql을 포기하기 시작했습니다.프로크, 그리고 MySQL 8.0부터 SHOW CREATE PROCEDURE나 SHOW CREATE FUNCION을 사용하려면 어떤 권한이 필요합니까?
 
MySQL 8.0에서 시작하여 mysql에 저장 프로세스를 저장합니다.routines와 mysql.parameters 시스템 테이블에서 직접 액세스할 수 없으며 INFORMATIONSCHEMA.ROUTINES.MySQL 8.0 이전처럼 권한 수여가 통하지 않습니다.
 
 
Where are stored procedures stored?   Stored procedures are stored in the mysql.routines and mysql.parameters tables, which are part of the data dictionary. You cannot access these tables directly. Instead, query the INFORMATION_SCHEMA ROUTINES and PARAMETERS tables. See Section 25.29, “The INFORMATION_SCHEMA ROUTINES Table”, and Section 25.19, “The INFORMATION_SCHEMA PARAMETERS Table”. You can also use SHOW CREATE FUNCTION to obtain information about stored functions, and SHOW CREATE PROCEDURE to obtain information about stored procedures. See Section 13.7.7.9, “SHOW CREATE PROCEDURE Statement”.
 
 
개인 테스트에서alterroutine를 수여하면 저장 프로세스의 정의를 볼 수 있지만 이 권한 수여도 문제를 가져온다. 권한을 수여한 사용자는 저장 프로세스의 정의를 볼 수 있을 뿐만 아니라 이 저장 프로세스를 삭제할 수 있다(이것도 문제이다).이것은 물론 실현할 수 있는 다른 권한이 있는지 모르겠다.
 
mysql> grant alter routine on procedure MyDB.prc_2 TO test@'192.168%';
 
Query OK, 0 rows affected (0.08 sec)
 
 
 
mysql> 

 
요약:
MySQL5.7 또는 이전 버전에서는 사용자에게 mysql을 조회할 수 있습니다.proc는 저장 프로세스 정의를 보는 권한을 간접적으로 실현할 수 있다. MySQL 8.0에서ALTER ROUTINE의 권한을 부여함으로써 저장 프로세스 정의를 보는 권한을 간접적으로 실현할 수 있다. 둘 다 문제가 있다. 바로 권한을 확대하는 것이다. 이것은 MySQL 기능성에 속하는 결함으로 짧은 시간 동안 존재할 것으로 추정된다!

좋은 웹페이지 즐겨찾기