MySQL 入门-远程连接、创建用户和授权

作者:vkvi 来源:ITPOW(原创) 日期:2022-3-10

远程连接

打开 3306 端口

Windows 在高级安全防火墙,入站规则中,允许 3306。

允许 root 远程连接

默认情况下,只能在本机使用 root 连接 MySQL,怎样允许在互联网上也连接它呢?

注意:这里只是说如何操作,并不是建议你开放 root。

连接 MySQL,先看看情况:

select user, host from mysql.user;

mysql 是系统数据库,后面的 user 是其表名。

root

可以看出,root 只能在 127.0.0.1、::1(IPv6)、localhost 上连接。

grant all privileges on *.* to root@'%' identified by 'password';
  • grant all privileges 是授予所有权限,可省略 privileges 写作 grant all

  • on *.* 是所有数据库、所有表。

  • to root@'%' 是对 root 用户的所有 IP,这个 % 是通配符。

  • identified by 'password' 是指定密码:必须指定,而且比较有意思的是可以指定跟之前不一样的密码,也就是说可以实现不同的 IP 有不同的密码。

% 和密码,必须使用引号,不能省略,其他的通常都可以省略。但规范的写法是:数据库名称使用 `(即 ~ 下面那个),用户名也加上单引号('root')。

% 不能省略引号是因为字符特殊,如果是 localhost 就可以省略,而密码不能省略是密码就是要引起来。

前面说了 % 是通配符,也说了可以指定不一样的密码,那其实我们在使用 localhost 连接时,还是 localhost 对应的密码优先,并不是 % 对应的密码优先。

如果是 MySQL-Front 创建用户的话,就简单了,图形界面,但是不知道是我版本的原因还是怎么的,选择所有权限时会出错,也就是说授不了 all privileges,只得还是用命令行。

另外,查看当前用户的权限,查看特定用户的权限,分别如下:

 show grants;
 show grants for root@localhost;

注意 MySQL 的用户,总是跟主机绑在一起的,所以有个 @,但是我们在连接字符串中用不着指定主机,比如:

server=123.123.123.123;port=3306;database=test;uid=test;pwd=mytestpassword;Charset=utf8;Allow Zero Datetime=True;SslMode=None

创建用户和授权

其实创建用户就是前面讲的,也就是说创建用户和授权一体化操作:

grant all on test.* to test@'%' identified by 'mytestpassword';

此法比较有用,通常是对这个数据库授一个管理员。

收回权限和删除用户

revoke all on test.* from test@'%';

有时候收回权限时会说没这个权限,收回失败。此时可以用前面说的 show grants for user@host,看看,到底有什么权限。

删:

drop user test@'%';

我很奇怪:我明明已经删除了,前后对比可以看出用户由 6 变成 5 了,可是 MySQL 执行时提示:0 rows affected。看来看这个提示不可靠。

如果对应还有相同的用户(只是主机不同),此时建议重启 SQL。

图形化操作就更简单了。

相关文章