2009-10-26 81 views
12

我的開發人員和我在共享的MySQL開發數據庫上有自己的開發模式。我的任務要求我在我的模式中創建觸發器,但迄今爲止我一直沒有成功。無法在5.1.32上創建具有TRIGGER特權的MySQL觸發器

CREATE TRIGGER myTrigger AFTER DELETE on myTable 
FOR EACH ROW BEGIN 
    -- DO STUFF 
END; 

MySQL的說: ERROR 1419(HY000):你沒有SUPER權限和二進制日誌功能已啓用(你可能希望使用不太安全log_bin_trust_function_creators變量)

我查了MySQL手冊(http://dev.mysql.com/doc/refman/5.1/en/privileges-provided.html):

TRIGGER權限使您能夠創建和刪除觸發器。您必須擁有該表的特權才能創建或刪除該表的觸發器。這個特權是在MySQL 5.1.6中添加的。 (在此之前的MySQL 5.1.6,觸發操作所需的SUPER權限。)

我們正在運行「5.1.32企業GPL的先進日誌」,所以TRIGGER權限應該是足夠的;但是,DBA授予我mySchema *上的TRIGGER特權,並且在做SHOW GRANTS時我可以看到它,但我仍然遇到需要「超級」特權的錯誤。我們不想讓所有的開發者超級。

有什麼建議嗎?

回答

13

這是bug report for this。一種選擇是使用 --log-bin-trust-function-creators選項打開,這將允許您創建沒有SUPER權限的觸發器。 This page解釋了什麼在手段上轉向該選項。基本上,它與MySQL是否認爲你的觸發器是確定性的(即複製安全)有關。您的數據庫管理員可能會或可能不會舒適地在該模式下運行。這並不理想,但比發佈SUPER更好...

更新:在第二個鏈接的文檔實際上使它聽起來像你可能能夠通過使用基於行的複製,甚至混合模式複製。至少這會使複製安全。不管你是否還需要SUPER,我都不知道,但可能值得一試。

+1

感謝您的鏈接。 DBA將僅在開發服務器上使用log-bin-trust-function-creators選項運行,而不是發出SUPER。 – 2009-10-27 15:10:10

+0

MySQL錯誤#52127表示,如果您啓用了二進制日誌記錄,則不允許用戶在未授予SUPER權限的情況下添加觸發器。 – 2011-02-10 06:30:27

+0

值得一提的是,如果您使用複製,此錯誤實際上非常有用,因爲它可以防止您無意中創建在複製設置中不起作用的觸發器。 一個例子就是你將RAND()這樣的東西用作觸發器的一部分。 – coatesap 2013-10-15 15:52:52