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

cczfrluj  于 2023-05-16  发布在  Mysql
关注(0)|答案(3)|浏览(170)

我们的用户作为一个相当低级别的用户登录到生产数据库,在数据库级别授予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权限,而不需要一个同名的“持久化”表吗?

u3r8eeie

u3r8eeie1#

根据MySQL reference
MySQL允许您授予不存在的数据库或表的权限。对于表,要授予的特权必须包括CREATE特权。
因此,请尝试在上面的grant语句中包含CREATE权限。

**提示:**如果在测试新权限时出现“Access Denied”或“CREATE Permission Denied”错误,请断开连接,然后重新连接到目标用户的MySQL数据库。看起来有些特权只有在你这样做的时候才会被“更新”,CREATE TEMPORARY TABLES就是其中之一。

t0ybt7op

t0ybt7op2#

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

vwhgwdsa

vwhgwdsa3#

MySQL的赠款是独立于对象实际上 * 存在 * -你可以授予表不存在(尚未),这些权限将被分配给一个表,如果它要创建。这意味着您可以授予用户创建特定表的权限。
我很想为临时表创建一个数据库(比如称为temp),并授予用户访问该数据库的权限。基于数据库的权限比每个对象的权限更容易管理。

相关问题