2010-04-19 24 views
17

Ben [email protected] olarak MySQL prosedürlerin hepsi yazdım: başka bir sunucuya dağıtırkenKayıtlı bir yordam oluştururken `definer` gerekli midir?

CREATE DEFINER=`root`@`localhost` PROCEDURE `p_add_user`(...) 

Sorun şu ki, ben şimdiki kullanıcı ile root değiştirip can sıkıcı mevcut IP ile localhost değiştirmek zorunda.

Veritabanımı ve yordamlarımı kullanmak isteyen birinin her yordamın tanımlayıcısını değiştirmek zorunda kalmaması için yordam yazmanın bir yolu var mı? here

CREATE 
[DEFINER = { user | CURRENT_USER }] 
PROCEDURE sp_name ([proc_parameter[,...]]) 
[characteristic ...] routine_body 

Yani MySQL belgelerinde belirtildiği üzere

cevap

13

, DEFINER parçası zorunlu değildir, sadece USULÜ çalışmalıdır CREATE. Sen prosedür vücutta aşağıdaki ifadeyi ekleyerek yürütme ayrıcalıkları belirtebilirsiniz

+0

"DEFINER fıkra tetik aktivasyon zamanında erişim yetkileri kontrol ederken kullanılacak güvenlik bağlamını belirlemede daha fazla ayrıntı bu bölümde daha sonra verilecektir.". Eminim ki, prosedürler yalnızca ayrıcalıklı kullanıcılar tarafından kullanıldığında, tüm kesin şeyleri tamamen kaldırabilirim? – Xorty

+0

Evet, sanırım. Kullanıcının izinlerini tanımladığınızda, verilebilecek/reddedilebilecek bir "yürütme prosedürleri" ayrıcalığına sahip olduğunuzu düşünüyorum (bunun hakkında emin değilim ...) – maid450

+0

İyi, Daha sonra deneyeceğim ve işe yaradıysa geri döneceğim. Thanx – Xorty

1
CREATE DEFINER=[your_web_user]@% PROCEDURE p_add_user(...) 

sonra (... Eğer prosedüründe kullanıcıyı tanımlamak istiyorsanız o .. muhtemelen bu, size yardımcı olacaktır edin bildirimi):

SQL SECURITY INVOKER 

Örnek:

CREATE DEFINER=`root`@`localhost` PROCEDURE `p_add_user`() 
SQL SECURITY INVOKER 
(...) 

Aksi takdirde, gerçek invoker s rivileges uygulanır ve DEFINER bölümü atlanır (şema alımı sırasında otomatik olarak eklendiğinde bile). Burada Tam referans: Diyor https://dev.mysql.com/doc/refman/5.7/en/stored-programs-security.html

+2

DEFINER özelliğini açıklamanız mümkün mü? % demektir - herhangi bir ip adresinden herhangi bir kullanıcıya izin verir? Lütfen. bana cevap ver. DEFINER'ın otomatik olarak oluşturulduğu godaddy paylaşılan ana bilgisayar kullanıyorum ve bunu kaldıramıyoruz. DEFINER = [databasename] @% olarak belirtilen ancak saklı yordamı yerel windows uygulamasından iletmeme izin vermiyor; ama normal sorgu kullanırsam iletişim kurabilirim (örneğin: tablenm'den * seç ...) Bu konuda bana yardımcı olabilecek herhangi biri olabilir - lütfen. – Sensa

İlgili konular