数据库安全管理_MySQL
数据库安全管理
MySQL数据库通过用户和密码来控制用户对数据库的访问,当我们新安装了一个数据库服务器时,MySQL的权限表设置是很不安全,它默认允许任何人不需要密码就可访问数据库。所以我们安装好服务器后第一件需要做的就是设置用户密码。
在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用户有着同样的权限,这是一个很大的安全漏洞。应该把它删除或把权限削弱。