正在阅读:MySQL 5.0 新特性教程 存储过程:第四讲MySQL 5.0 新特性教程 存储过程:第四讲

2005-09-07 09:55 出处:PConline原创 作者:mysql AB;翻译:陈朋奕 责任编辑:moningfeng

2. Privileges EXECUTE

 

 


GRANT EXECUTE ON p TO peter
[WITH GRANT OPTION];


  上面的特权是决定你是否可以使用或执行存储过程的特权,过程创建者默认拥有这个特权。

3. Privileges SHOW ROUTINE?

 

 


GRANT SHOW ROUTINE ON db6.* TO joey
[WITH GRANT OPTION];


  因为我们已经有控制视图的特权了:GRANT SHOW VIEW。所以在这个基础上,为了保证兼容,日后可能会添加GRANT SHOW ROUTINE特权。这样做是不太符合标准的,在写本书的时候,MySQL还没实现这个功能。

4. Privileges Invokers and Definers 特权调用者和定义者

 

 


CREATE PROCEDURE p26 ()
SQL SECURITY INVOKER
SELECT COUNT(*) FROM t //
CREATE PROCEDURE p27 ()
SQL SECURITY DEFINER
SELECT COUNT(*) FROM t //
GRANT INSERT ON db5.* TO peter; //


  现在我们测试一下SQL SECURITY子句吧。Security是我们前面提到的程序特性的一部分。你root用户,将插入权赋给了peter。然后使用peter登陆进行新的工作,我们看peter可以怎么使用存储过程,注意:peter没有对表t的select权力,只有root用户有。

5. Privileges Invokers and Definers

 

 


/* Logged on with current_user = peter */使用帐户peter登陆

mysql> CALL p26();
ERROR 1142 (42000): select command denied to user
'peter'@'localhost' for table 't'
mysql> CALL p27();
+----------+
| COUNT(*) |
+----------+
| 1 |
+----------+
1 row in set (0.00 sec)


  当peter尝试调用含有调用保密措施的过程p26时会失败。那是因为peter没有对表的select的权力。

  但是当petre调用含有定义保密措施的过程时就能成功。原因是root有select权力,Peter有root的权力,因此过程可以执行。

 

键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品