2012-04-23 34 views
6

我正在推出一些軟件的更新,其中包括運行SQL腳本來創建觸發器。如何在表上執行CREATE TRIGGER時刪除默認的DEFINER?

在我的.sql文件語法中,我沒有包含任何DEFINER子句,因爲我希望我的客戶的生產MySQL用戶(他們自己設置)能夠在程序運行時執行這些觸發器。

問題是,測試表明MySQL自動爲TRIGGER創建了一個DEFINER,其中'CURRENT_USER'@'%'。 當你做了明智的事情,並使用一個(限制)帳戶進行日常數據操作,另一個帳戶用於大型更新(root?)時,最終嘗試執行TRIGGER與一個或多個沒有許可做到這一點。

有沒有辦法刪除這個「自動添加定義」功能?

我試過輸入DEFINER = '%'@'%'但這不被接受。

+1

看看這個 - http://stackoverflow.com/questions/9956839/phpmyadmin-export-view-without-database-name-or-algorithm – Devart 2012-04-23 13:42:13

回答

0

如果您使用的是* nix平臺,則可以通過以下任一命令行腳本刪除定義者。

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

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

在您database.sql是非常大的情況下,則代替第一爲之傾倒,然後除去定義者,轉儲期間刪除定義者。

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