MySQL授予用户权限

4
我想在MySql中创建一个新用户。我不希望这个新用户对我的现有数据库做太多事情[我只想授予他选择特权],但他可以对他创建的新数据库做任何事情。
首先,是否有一种按照数据库所有者授予权限的方法?如果可能的话,那就是我正在寻找的理想方法。如果不行,那么我该如何限制一个特定用户仅访问[只有选择特权]某些特定数据库,允许他为其余数据库做任何他想做的事情?

@Anuj,你需要为每个想要用户访问的数据库授予权限。 - Nico
但正如我所说,用户也可以创建新的数据库。因此,我无法为所有数据库明确授予用户权限。 - Anuj
如果你用HeatfanJhon的回答解决了这个问题,请告诉我们,好吗? - jcho360
不,我仍在等待解决方案。 - Anuj
4个回答

17

以下内容来自MySQL 授权文档:

CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'mypass';
GRANT SELECT ON *.* TO 'jeffrey'@'localhost';
GRANT ALL ON db1.* TO 'jeffrey'@'localhost';

第一个命令创建了用户。第二个命令在所有数据库和表上授予了选择权限。第三个命令在db1中的所有表上授予了完全访问权限。

您还有其他特定的需求吗?


是的,我看过这个,但我无法理解我计划做什么。比如说,我已经有两个数据库存在,分别是db1和db2。我希望新用户只能对这两个数据库进行选择权限,但他应该能够创建自己的新数据库,并且可以在该数据库中进行任何操作。 - Anuj
相反,我希望得到这样的东西: GRANT ALL ON . TO 'jeffrey'@'localhost'; GRANT SELECT ON db1.* TO 'jeffrey'@'localhost'; 但是这样不起作用。我甚至获得了db1的所有权限。 - Anuj
是的,我看到你的问题了。我尝试了一项测试,给予用户创建特权,我能够使用该用户ID创建一个新的数据库,但是该用户ID在创建的数据库上没有任何特权。需要进行更多的研究。 - HeatfanJohn
而且,创建权限还使用户能够在现有数据库中创建表,这也不是我想要的。 - Anuj

3

为特定用户提供权限,您可以使用以下框架:

GRANT [type of permission] ON [database name].[table name] TO ‘[username]’@'localhost’; 
GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';

这个命令中的星号分别代表可以访问的数据库和表,该特定命令允许用户在所有数据库和表中读取、编辑、执行和执行所有任务。
一旦您确定了要为新用户设置的权限,请务必重新加载所有权限。
 FLUSH PRIVILEGES;

更多关于权限的信息,可以阅读此文章:如何在 MySQL 中创建新用户并授予权限
权限列表请参见 MySQL 手册页面MySQL 提供的权限

1

打开mysql命令提示符。

当主机为localhost时,使用以下命令创建新用户

CREATE user 'test_user'@'localhost' identified by 'some_password';

对于任何主机使用 %,就像这样

CREATE user 'test_user'@'%' identified by 'some_password';

用户创建后,您需要授予一些访问权限。使用以下命令进行操作。

GRANT SELECT,INSERT,UPDATE
ON database_name.table_name
TO 'test_user'@'localhost';

在成功执行上述查询后,test_user可以在database_name(数据库名称)的table_name(表名)中进行选择、插入和更新操作。


-2

grant privilege 是在数据库中赋予权限的方式

grant privilege on object to user

object 是任何数据表或关系,user 可能是被授予权限的人。

例如

grant select,insert,update,on object name to user name

grant select on employee to john with grant option;

revoke delete on employee from john.

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