저장 프로시저 정의자 변경
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
'programing' 카테고리의 다른 글
Laravel MySql 드라이버를 찾을 수 없음 (0) | 2023.09.01 |
---|---|
Oracle - 테이블을 삭제하지 않고 테이블 제약 조건 삭제 (0) | 2023.09.01 |
SQL의 두 비트 마스크를 비교하여 일치하는 비트가 있는지 확인 (0) | 2023.09.01 |
점선 테두리 스트로크 길이 및 스트로크 간 거리 제어 (0) | 2023.09.01 |
Git를 사용하여 로컬과 원격 간의 변경 사항을 찾는 방법 (0) | 2023.09.01 |