2011-12-15 2 views
1

mysql 5.5를 사용하여 사용자, 뷰를 생성하고 해당 뷰에 대한 선택 권한을 부여하는 스크립트를 작성하려고합니다. 여기 내가 지금까지 가지고있는 것이있다.이름에 사용자 변수가있는 mysql 뷰를 만드는 방법

set @type_id := 1; 
set @username := 'somecompany'; 
set @password := 'company1234'; 
set @prefix := 'somecompany'; 

CREATE OR REPLACE VIEW CONCAT(@prefix, '_report') AS 
SELECT * FROM my_table 
WHERE type_id = @type_id; 

보기 이름의 문자열을 찾고 있지 않으므로 작동하지 않습니다. 나는 문을 사용하여 사용자를 만들기 위해이 문제를 가지고 :

INSERT INTO mysql.user (Host, User, Password) VALUES ('%', @username, PASSWORD(@password)); 

내가 뷰를 생성하고 내가 만든 사용자에게 그 뷰를 선택 부여하는 데 사용할 수있는 비슷한 트릭이 있습니까?

답변

0

Prepared Statements을 사용하여이 쿼리를 실행할 수 있습니다. 쿼리를 문자열로 구성하고 준비된 문으로 실행하십시오. - 로그 5.5.12


편집

MySQL의

SET @s = 'CREATE VIEW view_actor AS SELECT * FROM sakila.actor;'; 
PREPARE stmt2 FROM @s; 
EXECUTE stmt2; 
DEALLOCATE PREPARE stmt2; 


-- Check CREATE VIEW 
SHOW CREATE VIEW view_actor; 

CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`%` SQL SECURITY DEFINER VIEW `view_actor` AS select `sakila`.`actor`.`actor_id` AS `actor_id`,`sakila`.`actor`.`first_name` AS `first_name`,`sakila`.`actor`.`last_name` AS `last_name`,`sakila`.`actor`.`last_update` AS `last_update` from `sakila`.`actor` 
+0

http://dev.mysql.com/doc/refman/5.5/en/sql-syntax-prepared- statements.html 5.5 사용자 설명서에는 준비된 명령문을 사용할 수있는 쿼리 목록이 있습니다. 뷰를 만들 수있는 준비된 문과 함께 사용할 수 없으며 워크 벤치에서 나에게 적합하지 않습니다. –

+0

예, 정말로 CREATE VIEW는 여전히 지원되지 않습니다 ;-(INSERT INTO를 사용하여 새 사용자를 추가하거나 CREATE USER 문을 사용할 수 있습니다. 또 다른 방법은 응용 프로그램에서 수행하는 것입니다 .. – Devart

+0

그만 !! 나는 매우 intresting 것을 발견했습니다. CREATE VIEW는 prepared statement와 함께 사용할 수 있는데, MySQL 5.5에서 처리 했으므로 아무 것도 할 수 없다. – Devart