2012-04-23 10 views
6

Bazı yazılımların tetikleyicileri oluşturmak için SQL komut dosyası çalıştırmayı içeren bir güncelleştirmeyi kullanıma sunarım.Tabloda CREATE TRIGGER çalıştırırken varsayılan DEFINER nasıl kaldırılır?

Benim .sql dosya sözdiziminde, program çalışırken bu tetikleyicileri çalıştırabilmem için müşterimin MySQL kullanıcısını (kendileri tarafından ayarlandıkları) istediğim gibi herhangi bir DEFINER yan tümcesi eklemedim.

Thing, testler MySQL'in otomatik olarak 'CURRENT_USER'@'%' ile TRIGGER için bir DEFINER yarattığını gösterdi. Mantıklı olanı yaptığınızda ve günlük veri işleme için (kısıtlı) bir hesap kullandığınızda ve büyük güncellemeler için (root?) Bir diğeri kullandığınızda, TRIGGER'ı hiçbir veya birden fazla kullanıcıyla yürütmeyi denediğinizde sonuçlanırsınız. bunu yapmak için izin.

Bu "otomatik ekleme tanımlayıcısı" özelliğini kaldırmanın bir yolu var mı?

DEFINER = '%'@'%' girmeyi denedim, ancak bu kabul edilmiyor.

+1

bu bir göz atın - http://stackoverflow.com/questions/9956839/phpmyadmin-export-view-without-database-name-or-algorithm – Devart

cevap

0

Eğer bir * nix platformunda iseniz, aşağıdaki komut satırı komut dosyalarından biriyle çıkarılabilir. senin database.sql çok büyük halinde

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

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

sonra yerine önce onu damping ve ardından definer kaldırılması, dökümü sırasında definer kaldırın.

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

İlgili konular