[英]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.