有没有更好的方法为MySQL中的临时表分配权限?

时间:2009-12-10 11:48:01

标签: mysql mysql-error-1146 mysql-error-1142

我们的用户以相当低级别的用户身份登录到生产数据库,在数据库级别授予SELECT,并在他们需要访问的特定表上授予INSERT / UPDATE / DELETE。

他们还有权创建临时表(我们需要它们来处理一些更复杂的查询)。问题是虽然他们可以创建临时表,但他们无权访问INSERT!

我们发现的一种解决方法是创建一个同名的“真实”(持久?)表(但只有一个字段)并授予它们插入其中的访问权限。然后,当使用相同的名称创建临时表时,系统将使用该表,而不是持久表。

mysql> CREATE TEMPORARY TABLE `testing` (`id` INTEGER AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(30));
Query OK, 0 rows affected (0.04 sec)
mysql> INSERT INTO `testing` (`name`) VALUES ('testing');
ERROR 1142 (42000): INSERT command denied to user 'stduser'@'office.companyname.co.uk' for table 'testing'

如果您尝试授予对表的访问权限(在另一个会话中,以root用户身份),则不能:

mysql> GRANT INSERT ON testdb.testing TO 'stduser'@'%';
ERROR 1146 (42S02): Table 'testdb.testing' doesn't exist

所以我的问题是,基本上,我们是否可以在临时表上授予INSERT / UPDATE / DELETE而不会挂起同名的“持久”表?

3 个答案:

答案 0 :(得分:5)

根据MySQL reference

  

MySQL允许您授予权限   在没有的数据库或表上   存在。对于表,权限   被授予必须包括CREATE   特权。

因此,请尝试在上面的grant语句中包含CREATE权限。

答案 1 :(得分:4)

解决此问题的一种方法是创建一个特殊的数据库并授予用户对它的写入权限,然后让它在该特殊数据库中创建这些临时表。

答案 2 :(得分:1)

MySQL授权独立于实际现有的对象 - 您可以在尚未存在的表上授予,并且如果要创建表,则将这些权限分配给表。这意味着您可以授予用户创建特定表的权限。

我很想创建一个仅用于临时表的数据库(称为temp),并授予用户访问该数据库的权限。基于数据库的权限比每个对象的权限更容易管理。

相关问题