2012-04-23 17 views
6

Tôi đang triển khai bản cập nhật cho một số phần mềm, bao gồm chạy tập lệnh SQL để tạo trình kích hoạt.Làm thế nào để loại bỏ DEFINER mặc định khi thực hiện một CREATE TRIGGER trên một bảng?

Trong cú pháp tệp .sql, tôi không bao gồm bất kỳ mệnh đề DEFINER nào, vì tôi muốn người dùng MySQL sản xuất của khách hàng (mà họ tự thiết lập) để có thể thực thi các trình kích hoạt này khi chương trình đang chạy.

Thing là, các thử nghiệm cho thấy rằng MySQL sẽ tự động tạo DEFINER cho TRIGGER, với 'CURRENT_USER'@'%'. Khi bạn làm điều hợp lý và sử dụng tài khoản (bị hạn chế) cho thao tác dữ liệu hàng ngày và một tài khoản khác để cập nhật lớn (root?), Bạn sẽ cố gắng thực thi TRIGGER với một hoặc nhiều người dùng không có cho phép làm điều đó.

Có cách nào để xóa tính năng "tự động thêm bộ lọc" này không?

Tôi đã thử nhập DEFINER = '%'@'%' nhưng điều này không được chấp nhận.

+1

Hãy xem này - http://stackoverflow.com/questions/9956839/phpmyadmin-export-view-without-database-name-or-algorithm – Devart

Trả lời

0

Nếu bạn đang sử dụng nền tảng * nix, trình xóa dữ liệu có thể bị loại bỏ bởi một trong các tập lệnh dòng lệnh sau.

cat database.sql | sed -e "s/DEFINER=[^*]*\*/\*/" > database_nodefiner.sql

perl -pe 's/\sDEFINER=`[^`]+`@`[^`]+`//' <oldfile.sql> newfile.sql 

Trong trường hợp database.sql của bạn là rất lớn, sau đó thay vì bán phá giá đầu tiên và sau đó loại bỏ các DEFINER, loại bỏ các DEFINER trong bãi.

mysqldump database | sed -e "s/DEFINER=[^*]*\*/\*/" > database_nodefiner.sql

Các vấn đề liên quan