mysql数据库在安装之后,有一些内置的库(test库)、用户(如root@localhost.localdomain)是不需要的,而且在Linux系统上,yum安装的mysql是默认无root密码的,这些都给数据库服务器的安全带来了隐患。
这篇文章就是介绍如何进行初始优化,把这些隐患消除掉,以及在root用户被禁止远程登陆的情况下创建普通用户用于局域网管理。
我们的操作环境是64位windows 7系统上面安装的mysql 5.5
关于MySQL数据的安装,可以参考:MySQL安装(Windows 7)
1、删除test库
1 C:\Users\Administrator>mysql -uroot -p123456 2 3 4 mysql> show databases; 5 6 mysql> drop database test;
2、删除不使用的用户
在 Linux 系统上 yum 安装 mysql 时,直接使用 mysql 命令即可连接到 mysql,这是因为 mysql 的内置用户(用户名为空而且也没有密码)导致的。甚至 root 用户也没有密码,即使root用户不能进行远程连接,这也是不安全的。
1 mysql> select user, host, password from mysql.user; 2 +------+-----------------------+----------+ 3 | user | host | password | 4 +------+-----------------------+----------+ 5 | root | localhost | | 6 | root | localhost.localdomain | | 7 | root | 127.0.0.1 | | 8 | | localhost | | 9 | | localhost.localdomain | | 10 +------+-----------------------+----------+ 11 5 rows in set (0.00 sec)
首先,把用户名为空的用户删除
mysql> delete from mysql.user where user = '';
然后,把root@localhost.localdomain用户删除
mysql> delete from mysql.user where host = 'localhost.localdomain';
然后,为 root 用户设置密码
mysql> update mysql.user set password = password('123456');
也可以在命令行使用 mysqladmin 命令设置密码:mysqladmin -u root password '123456'
查看一下
1 mysql> select user, host, password from mysql.user; 2 +------+-----------+-------------------------------------------+ 3 | user | host | password | 4 +------+-----------+-------------------------------------------+ 5 | root | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | 6 | root | 127.0.0.1 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | 7 +------+-----------+-------------------------------------------+ 8 2 rows in set (0.00 sec)
最后,刷新一下权限
mysql> flush privileges;
3、添加局域网管理用户
因为 root 已经被禁止了远程连接,即使是局域网主机,也不能连接。但是我们有需要从远程连接到mysql服务器进行管理。此时可以:
创建用户,允许从局域网主机连接,可以授予所有库、所有表的所有权限,也可以只授予某些库、某些表的某些权限。
我们通常的解决方案是:一个拥有所有权限的管理员用户(用户名密码只能几个核心管理者拥有,甚至可以把host设置在很小的范围内),管理不同库的多个普通用户(不同系统的管理者拥有,彼此尽量无交集)
下面我们看一下创建用户的语法:创建system用户,授予所有库、所有表的所有权限,允许局域网192.168.0网段主机连接,密码是123456
1 mysql> GRANT ALL ON *.* TO 'system'@'192.168.0.%' IDENTIFIED BY '123456'; 2 mysql> GRANT ALL ON *.* TO 'system'@'localhost' IDENTIFIED BY '123456'; 3 mysql> GRANT ALL ON *.* TO 'system'@'127.0.0.1' IDENTIFIED BY '123456'; 4 5 mysql> select user, host, password from mysql.user; 6 +--------+--------------+-------------------------------------------+ 7 | user | host | password | 8 +--------+--------------+-------------------------------------------+ 9 | root | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | 10 | root | 127.0.0.1 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | 11 | system | 192.168.0.% | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | 12 | system | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | 13 | system | 127.0.0.1 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | 14 +--------+--------------+-------------------------------------------+ 15 5 rows in set (0.00 sec) 16 17 mysql> flush privileges;
从 192.168.0.10 主机进行远程连接
C:\Users\Administrator>mysql -usystem -p123456 -h 192.168.0.105
可以成功连接了
4、mysql命令主要选项
-?, --help | 显示帮助 |
-D, --database=name | 指定使用的数据库 |
--default-character-set=name | 设置客户端连接编码 mysql -uroot -p123456 --default-character-set=gbk |
-e, --execute=name | 执行语句后退出,这个选项在编写shell脚本时很有用 mysql -uroot -p123456 --default-character-set=gbk -e "select * from test.t_user;" |
-h, --host=name | 连接主机名。默认loadlhost。在连接远程数据库时使用 |
-p, --password[=name] | 密码,如果未指定这个选项,会在mysql命令行提示输入 |
-P, --port=# | 服务端口,默认3306 |
-S, --socket=name | 连接使用的socket文件 |
-u, --user=name | 连接使用的用户 |
-V, --version | 输出版本信息 |
--connect-timeout=# | 连接超时时长,单位为秒 |
你好你好你好你好你好
你好你好你好
5、help命令
MySQL 的官方文档非常全面,即使您没有 MySQL 相关经验,只要有一定的 SQL、DOS/Linux 命令行基础,就可以根据官方文档学习 MySQL 的核心命令和 SQL 语法了。
在 mysql 控制台里面,可以使用 help 来查看帮助,如:查看 create 的帮助可以使用 help create 语句、查看删除表的帮助可以使用 help drop table 语句......