MYSQL教程:数据库安全管理


为了确保数据库平稳可靠运行,我们需进行维护和管理,这是每一位数据库管理员的职责。下面分几个专题分别介绍。

http://www.phpstudy.net)整理发布!转载请注明出处,谢谢!

在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用户有着同样的权限,这是一个很大的安全漏洞。应该把它删除或把权限削弱。


« 
» 

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3