2011-12-09 2 views
1

예제 : 슈퍼 유저가 아닌 사용자가 테이블 "a"에 삽입하는 프로 시저에 대한 실행 권한을 부여 받았습니다. 해당 사용자는 테이블 "a"가있는 데이터베이스가 "데이터베이스 표시"로 표시되지만 "테이블 표시"테이블에서는 "a"를 볼 수 없습니다. 그러나 동일한 사용자는 "프로 시저 상태 표시"와 함께 기본 프로 시저 정보를 볼 수 있습니다.mysql 사용자는 저장 프로 시저를 볼 수 있습니까?

이것은 감사를위한 것이며 감사 프로세스를 최대한 가려 둡니다. 사용자에게 프로 시저에 대한 실행 권한이 부여 된 경우 해당 사용자는 프로 시저를 볼 수 있어야합니다. 그리고 그들은 절차가 만지는 데이터베이스를 볼 수 있어야합니까?

답변

3

프로 시저의 소유자이거나 mysql.proc 테이블에 액세스 할 수있는 경우 here과 같은 프로 시저 정의를 볼 수 있습니다.

따라서 super로 프로 시저를 만들고 DEFINER CURRENT_USER를 설정하면 프로 시저가 수퍼로 실행됩니다. 그런 다음 슈퍼가 테이블에 액세스 할 수 있지만 다른 사람은 테이블에 액세스하지 못하게하십시오. 그것은 테이블과 소스를 모두 보호해야하지만 프로 시저를 호출 할 수 있어야합니다.

그리고 수퍼 유저가 아니어도 테이블에 액세스 할 수있는 모든 사용자가 될 수 있습니다.

+0

오른쪽. 따라서 슈퍼가 아닌 사용자는 쇼 작성 절차 (프로 시저 소유자가 아닌 경우)가있는 경우에도 프로 시저가 수행하는 작업을 볼 수 없습니다. 그러나 그들은 절차가 존재한다는 것을 알 수 있습니다. 나는 프로 시저가 존재한다는 것을 알 수없는 사용자가 프로 시저에 대한 실행 권한을 부여 할 수 있다고 생각하지 않는다. –

+0

나는 그들이 그것을 알 수있는 방법을 보지 못했다. 실제로 알고있는 프로 시저를 알 수있는 유일한 방법은 mysql.proc을 읽는 것인데, 그렇게 할 수 없다는 것이다. 물론 데이터베이스에 대한 API라고 말하면 각 proc과 매개 변수 및 결과 집합에 대한 설명을 제공 할 것입니다. –

+0

또는 사실, 아마도 SELECT ROUTINE_NAME FROM INFORMATION_SCHEMA.ROUTINES'을 (를) 할 수 있습니다. 나는 그 테이블에 어떤 제한도 보이지 않는다. –

관련 문제