gpt4 book ai didi

MySQL 将通配符数据库名称的权限授予新用户

转载 作者:可可西里 更新时间:2023-11-01 07:58:44 25 4
gpt4 key购买 nike

我试图通过权限尽可能限制我的 MySQL 用户帐户,只授予我需要的最低限度。

我有一个名为 creator 的用户,我想用它来创建新用户、创建新数据库,并将这些用户权限分配给那些数据库,但仅限于特定格式的数据库。

要创建 creator 用户,我有以下命令(以 root 身份运行):

GRANT CREATE USER, CREATE ON *.* TO 'creator'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON `my_prefix\_%`.* TO 'creator'@'localhost' WITH GRANT OPTION;

现在我假设这将使我能够创建一个新用户,并将任何特权分配给匹配 my_prefix_% 的表,但事实似乎并非如此。以 creator 用户身份运行以下查询会出现错误。

CREATE DATABASE IF NOT EXISTS `my_prefix_test`;
CREATE USER 'test'@'localhost' IDENTIFIED BY 'password';

这些工作正常,我可以很好地创建用户和数据库。然后尝试将权限分配给新数据库上的新用户,我得到以下信息:

GRANT ALL PRIVILEGES ON `my_prefix_test`.* TO 'test'@'localhost';

> ERROR 1044 (42000): Access denied for user 'creator'@'localhost' to database 'my_prefix_test'

为了安全起见,我还刷新了权限。

有没有人对这个问题有任何见解?使用存储过程会更容易实现吗?谢谢!

最佳答案

根据 the MySQL GRANT documentation ,通配符 _% 需要反斜杠转义才能用作数据库名称中的文字。在顶部的尝试中,您将一个 _ 转义为 \_ 而不是另一个。如果您确实转义了两个下划线,则可以获得正确的授权。不过,诀窍在于您必须稍后在以 creator 用户身份向 test GRANT 语句时转义它们 用户:

以 root(或完全特权用户)身份登录:

-- As root:
GRANT CREATE USER, CREATE ON *.* TO 'creator'@'localhost' IDENTIFIED BY 'password';
-- Escape both underscores here
GRANT ALL PRIVILEGES ON `my\_prefix\_%`.* TO 'creator'@'localhost' WITH GRANT OPTION;

creator 身份登录:

CREATE DATABASE IF NOT EXISTS `my_prefix_test`;
Query OK, 1 row affected (0.00 sec)
CREATE USER 'test'@'localhost' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.00 sec)

-- Issue the GRANT but escape the underscores.
-- because creator@localhost does not have permission to grant on
-- a pattern like myXprefixXtest, as the unescaped _ wildcards would allow
GRANT ALL PRIVILEGES ON `my\_prefix\_test`.* TO 'test'@'localhost';
Query OK, 0 rows affected (0.00 sec)

test 身份登录,赠款有效:

USE my_prefix_test;
CREATE TABLE t (id INT);
Query OK, 0 rows affected (0.00 sec)

关于MySQL 将通配符数据库名称的权限授予新用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27335060/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com