在MySQL中创建新用户并仅授予对特定数据库的访问权限

4

不确定是否可行。

我需要创建一个新的mysql用户,只能访问数据库名称具有前缀 user_db_ 的数据库。

我有一个php应用程序,在其中添加新用户时会创建一个名为user_db_'userid'的数据库。假设创建了三个用户,其数据库分别为user_db_1user_db_2user_db_3

我需要创建一个名为user_accounts的新用户,他只能访问user_db_1user_db_2user_db_3,..........,user_db_n


可能是重复的问题:MySQL:授予数据库的**全部**权限 - akostadinov
3个回答

6
使用以下代码为特定的数据库授予权限。
grant all privileges on DB_NAME.* to 'USER'@'REMOTE_IP' identified by 'PASSWORD';

3

以下是三个步骤:

  1. 创建数据库
  2. 创建新用户
  3. 使用grant all命令授予权限

例如:

CREATE DATABASE DBTEST

如果没有任何错误,这将成功运行,然后创建一个新用户。
CREATE USER 'NEWUSER'@'LOCALHOST' IDENTIFIED BY 'NEWUSERPASSWORD'

在创建用户后,赋予其创建表和删除表的权限。

GRANT ALL PRIVILEGES ON *.* TO 'NEWUSER'@'LOCALHOST'

并且最后只需给出一个命令。
FLUSH PRIVILEGES

更新 2015 年 3 月 31 日(如评论中所述)

您可以像这样在特定的数据库上授予权限

GRANT ALL PRIVILEGES ON DBTEST.* TO 'NEWUSER'@'LOCALHOST

0

在我看来,你可以使用以下组合:

SHOW DATABASES LIKE 'user_db_%'

获取当前用户数据库列表,以及

CREATE USER 'username'@'hostname' ...

创建一个用户,并且。
GRANT ALL ON user_db_N.* TO 'username'@'hostname'

为每个从SHOW DATABASES获取的数据库设置用户的数据库权限。


实际上并不是这样的,我可以在设置权限之后创建数据库。因此,只有使用前缀才能创建特权。 - Avinash
你说的“...并不是说在我设置了这个权限之后就可以创建数据库...”是什么意思?你需要做的是每次创建新的数据库时重新分配user_accounts用户的权限。 - peterm
嗨,彼得。我明白你的意思。这是否意味着没有简单的方法可以同时向用户授予对多个但不是所有数据库的权限? - Govind Rai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接