繁体   English   中英

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

[英]MySQL granting privileges on wildcard database name to new user

我试图通过权限尽可能地限制我的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'

我也为了安全而冲洗特权。

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

根据MySQL GRANT文档 ,通配符_%需要反斜杠转义才能在数据库名称中用作文字。 在您尝试顶部时,您已将一个_转义为\\_而不是另一个\\_ 如果你确实逃脱了两个下划线,你可以获得正确的拨款。 诀窍不过是,你必须转义后发出时GRANT语句作为creator用户的test用户:

以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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM