programing

저장 프로시저 정의자 변경

megabox 2023. 9. 1. 20:44
반응형

저장 프로시저 정의자 변경

MySQL 데이터베이스에는 약 100개의 루틴이 저장되어 있으며 대부분은 'root'을 정의자로 사용합니다.

저는 모든 루틴의 정의자를 'abc'로 변경하는 방법인 'abc'라는 다른 mysql 계정을 가지고 있습니다.

MySQL 서버에 'root'이 아닌 'abc' 사용자로만 액세스할 수 있는 경우에도 동일하게 액세스할 수 있습니까?

정의자 보기

show procedure status;

다음과 같이 변경할 수 있습니다.

UPDATE `mysql`.`proc` p SET definer = 'YournewDefiner' WHERE definer='OldDefinerShownBefore'

예:

 UPDATE `mysql`.`proc` p SET definer = 'user@%' WHERE definer='root@%'

이렇게 하면 모든 데이터베이스에 대한 모든 정의자가 변경되므로 주의하십시오.

필요한 table/db에 대해 mysql.procable의 정의자를 업데이트할 수 있습니다.

update mysql.proc set definer='root@localhost' where name='t_p';

내가 아는 한:당신은 그들 모두의 스크립트 텍스트를 가져와 abc로 삭제/재작성해야 할 것입니다.abc가 절차를 삭제/생성할 수 있는 권한을 가지고 있지 않으면 abc로 이 작업을 수행할 수 없습니다.

데이터베이스의 모든 프로시저 내보내기<DB>:

mysqldump --single-transaction --no-data --no-create-info --routines \
    --skip-triggers <DB> >routines.sql

편집routines.sql재생성:

cat routines.sql | mysql <DB>

명시하다-u그리고.-p필요한 경우 스위치를 켭니다.

데이터베이스를 내보내고 내보낸 파일을 텍스트 편집기(워드 프로세서가 아님)에서 열고 새 Definer를 찾아 기존 Definer로 교체하여 대량 Definer 변경 작업을 수행했습니다.그런 다음 기존 데이터베이스의 이름을 변경하고 기존 데이터베이스의 이름으로 새 데이터베이스를 작성합니다.수정된 내보내기 파일을 새 Definer 정보와 함께 가져오기만 하면 됩니다.저는 이 해결책이 마음에 듭니다. 왜냐하면 일이 잘 안 풀리면 제게 도움이 되기 때문입니다.문제가 발생하면 작성한 데이터베이스를 삭제하고 복사본의 이름을 변경합니다.

저는 이 문제를 아래 방법을 사용하여 마침내 해결했습니다.테이블에 데이터를 삽입하는 동안 1449 오류가 발생했습니다. 솔루션: 트리거 옵션으로 이동하십시오. 사용자에 의해 구분된 일부 드러그를 그곳에서 떨어뜨리기 전에 그것들이 있어야 합니다.이제 phpmydmin의 테이블에서 작업을 수행할 수 있습니다.

대신 간단한 방법을 사용하여 사용자(사용자)를 만듭니다. 모든 권한을 사용하고 연결 문자열에서 연결합니다.

abc.는 더 잘 작동할 것이고, mysql 버전 8은 지원하지 않습니다.mysql.proc

다음과 같은 방법으로도 이 작업을 수행할 수 있습니다.

update mysql.proc set definer = "root@localhost" where db = "mydatabase";
alter procedure old_proc_name
delimiter //
create PROCEDURE new_proc_name (parameter)
begin
 Your Sql Statement;
end//
delimiter ;

언급URL : https://stackoverflow.com/questions/3206820/change-the-stored-procedure-definer

반응형