只允许具有许多权限的MySQL用户选择

问题描述:

我正在创建一个数据库应用程序,它提供任何数据库的动态视图。对于安全功能,我只想允许选择。这可以通过检查第一个单词是否被选择来完成吗?我知道我应该有另一个有限权限的创建用户,但我试图避免这样做,以便我的应用程序易于使用。只允许具有许多权限的MySQL用户选择

基本上,有人可以给我一个示例查询,其中SELECT是第一个单词,但实际上可以修改数据吗?

这里有一个SELECT语句可以修改数据的例子(这是一个不起眼的角落的情况下,但它表明,它IS可能会导致数据被用SELECT修改)

SELECT udf_myfunction() 

考虑,如:

CREATE FUNCTION udf_myfunction() RETURNS INT 
READS SQL DATA 
BEGIN 
    DELETE FROM dummy_table1; 
    UPDATE dummy_table2 SET mycol = CONCAT(mycol,SUBSTR(mycol,1,1)); 
    RETURN 0; 
END 

(当然,用户需要被授予EXECUTE权限的功能,以便执行该功能。)

+0

好点,谢谢你。我想我会确保用户不能创建函数。 – jstn

有人可以给我一个示例查询,其中SELECT是第一个字 但实际上可以更改数据?

没有这样的事情。 SELECT仅用于数据读取。除非你正在选择一个改变数据的函数。请参阅@ spencer7593答案。

但是,您可能想要检查行阻止SELECT命令并避免它们,因为它似乎将您的数据库打开到第三方。

延伸阅读:http://dev.mysql.com/doc/refman/5.0/en/innodb-locking-reads.html