MYSQL教程:数据库安全管理
为了确保数据库平稳可靠运行,我们需进行维护和管理,这是每一位数据库管理员的职责。下面分几个专题分别介绍。
数据库安全管理
MySQL数据库通过用户和密码来控制用户对数据库的访问,当我们新安装了一个数据库服务器时,MySQL的权限表设置是很不安全,它默认允许任何人不需要密码就可访问数据库。所以我们安装好服务器后第一件需要做的就是设置用户密码。
本文由IT教学网(http://www.itjxue.com)整理发布!转载请注明出处,谢谢!
在MySQL中的mysql数据库的user数据表中存有用户的帐号信息,在初始状态下已存在root和一些匿名用户,且所有用户都没有设置密码。该数据表的这些用户信息是通过一个mysql_install_db脚本安装的。该表的主要列有:
-
User,连接数据库的用户名。
-
Host,允许连接到数据库服务器的主机名,“%”通配符代表所有主机。
-
Password,连接密码,已加密。
-
其它权限列,以“Y”或“N”标识是否有效。
在这种状态下的数据库是极不安全的,我们可用以下命令轻易地访问数据库:
% mysql -h localhost -u root #通过本地主机,root用户访问,不需要密码验证 % mysql -h localhost #通过本地主机,匿名用户访问,不需要密码验证
设置MySQL用户帐号密码的方法有三种:
-
使用mysqladmin程序:
% mysqladmin -h localhost -u root password "password" #设置在本地以root身分登录的密码 % mysqladmin -h remote -u root password "password" #设置远程主机以root身分登录的密码
在初始设置时,这两条语句都要运行,以确保数据库本地访问和网络访问的安全。
-
通过set password这条SQL语句设置:
mysql> set password for 'root'@'localhost' = password('password'); mysql> set password for 'root'@'remote' = password('password');
-
直接修改user权限表:
mysql> use mysql; mysql> update user set password=password('password') where user='root'; mysql> flush privileges; #重载权限表,使修改马上生效
MySQL使用驻留在内存中的权限表拷贝来进行访问控制,当使用mysqladmin和set password设置密码,MySQL会监察到权限表已被修改,它自动重载该表。而用update的方式,MySQL就监察不到变化,需手动用flush privileges命令刷新内存中的权限表,以使它马上生效。
为root用户设置密码后,如果需以root身份连接数据库,就需验证密码。我们可用以下语句连接数据库:
% mysql -u root -p Enter password: #输入root的密码
在user表中,user列为空的为匿名用户。它也是没有密码的,我们需为它们设置一个密码,或干脆把它们删除。在windows系统上的本地匿名用户帐号和root用户有着同样的权限,这是一个很大的安全漏洞。应该把它删除或把权限削弱。