2016-04-11 10 views
2

Kayıtlı bir yordam hazırladım, otomatik olarak benimle tamam olan oluşturma kullanıcısına kesin ekler, ancak saklı yordamda current_user öğesini almaya çalıştığımda, tanımlayıcıyı verir. Benim şartım, prosedürü yürüten kullanıcı adını elde etmektir. BununSaklı Yordam Nasıl Kullanılır Excepting kullanıcısı MySQL

Temel amacı:

Ben veritabanına aramaları gönderme birden fazla geliştirici var. Haklarını masadan iptal etmek istiyorum ve bunları yürütme hakları ile birlikte saklı bir prosedür sağlamak ve daha sonra tablodaki verileri kimin güncelleyeceğini izlemek istiyorum.

cevap

1

Umarım bu doğru yönde işaret edebilir: USER() işleviyle ilgili MySQL web sitesinden

http://dev.mysql.com/doc/refman/5.5/en/information-functions.html#function_user

: sunucuya bağlanırken

değeri belirtilen kullanıcı adını gösterir ve bağlandığınız istemci ana bilgisayarı.

Neede biraz farklı bir şey yapmam gerekti, ama seninle aynı alanda. Benim durumumda, kullanıcılara tüm ayrıcalıkları vermeden veritabanı oluşturmayı istedim.

Şablon olarak kullanabileceğinizi umduğum veritabanını vermek için saklı yordamım burada.

Ayrıntılı açıklamalar için
DROP PROCEDURE IF EXISTS createdb; 
DELIMITER $$ 
CREATE 
    DEFINER = 'root'@'localhost' 
    PROCEDURE createdb (IN dbname CHAR(50)) 
BEGIN 

    DECLARE EXIT HANDLER FOR 1007 
    SELECT CONCAT("Can't create database '", 
     dbname, "'; database exists") as msg; 

    SET @v_createdb = CONCAT('CREATE DATABASE ', dbname); 
    SET @v_grant = CONCAT('GRANT ALL PRIVILEGES ON ', dbname, 
     '.* TO \'',SUBSTRING_INDEX(USER(),'@',1),'\'@\'%\''); 

    PREPARE stmt_createdb FROM @v_createdb; 
    PREPARE stmt_grant FROM @v_grant; 

    EXECUTE stmt_createdb; 
    EXECUTE stmt_grant; 
    FLUSH PRIVILEGES; 

END $$ 

, ziyaret etmek isteyebilirsiniz http://www.microshell.com/database/how-to-grant-create-database-for-non-root-users/