MySQL 权限管理




前段时间,我班有两个人的MySQL数据库被攻破,所有数据被清空。他们的MySQL实例有两个共同点:

  1. 暴露3306端口。
  2. 使用root用户登录且为弱密码。

MySQL的root用户权限过大,使用root登录是较危险的。因此我们应当避免在生产环境使用root登录,而是新建一个权限较小的用户,以确保安全。

配置端口

MySQL默认配置为只监听本地回环上的3306端口,如果需要将3306端口暴露给外网,需要首先修改MySQL配置。
编辑MySQL的my.cnf配置文件,在ubuntu上,其默认位置为/etc/mysql/my.cnf
找到bind-address = 127.0.0.1,修改为bind-address = 0.0.0.0
修改完成后,重启MySQL。仅仅配置端口并不能使MySQL可以被远程访问,还需要配置用户权限,见下。

创建用户并设置权限

MySQL的root用户权限过于强大,我们不应当在生产环境中,尤其是暴露了3306端口的生产环境中使用root用户登录。

创建新用户

使用ROOT用户登录,并输入下列语句新建一个用户。

CREATE USER username IDENTIFIED BY 'password';

此时用户username已经建好,不过还没有任何权限,也就无法进行任何操作。

设置权限

键入

GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';

其中每个字段的意思为

GRANT [权限] ON [数据库].[表] TO '[用户名]'@'[来源IP]' IDENTIFIED BY '[密码]';

其中,权限字段为想要赋予该用户的权限。如果授予全部权限,则为ALL PRIVILEGES,也可以单独授权某些命令,如SELECT, UPDATE
来源IP为允许该用户登录的IP,例如localhost为只允许该用户从本地登录。如果不想限制该用户的登录IP,则此字段设为%
权限设置完成后,刷新权限使其生效

FLUSH PRIVILEGES;



Posted

in

by

Comments

2 responses to “MySQL 权限管理”

  1. Kay Avatar

    mark
    五个字

  2. antior Avatar

    mark
    五个字

发表回复/Leave a Reply

您的电子邮箱地址不会被公开。/Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.