使初始MySQL账户安全

MySQL 安装过程包括设置含有授权表的MySQL 数据库:

·         Windows 分发版包含预初始化的授权表,可以自动安装。

·         在Unix 中,用mysql_install_db 程序来安装 授权表。可以通过一些安装方法来运行该程序。否则你需要手动执行。

授权表定义了初始MySQL 用户账户和访问权限。按照以下步骤对这些账户进行设置:

·         用用户root 创建两个账户。这些账户为超用户账户,可以执行任何操作。初始root 账户的密码为空,因此任何人可以用root 账户不用任何密码来连接MySQL 服务器,并具有所有权限。

o        在Windows 中,一个root 账户用来从本机连接MySQL 服务器,另一个允许从任何主机连接。

o        在Unix 中,两个root 账户均用于从本机连接。必须从本机进行连接,一个账户主机名应指定为 localhost ,另一个账户为实际的主机名或IP 号。

·         创建了两个匿名用户账户,每个账户的用户名均为空。匿名账户没有密码,因此任何人可以使用匿名账户来连接MySQL 服务器。

o        在Windows 中,一个匿名账户用来从本机进行连接。它具有所有权限,同root 账户一样。另一个可以从任何主机上连接,具有test 数据库或其它以test 开始的数据库的所有权限。

o        在Unix 中,两个匿名账户均用于从本机连接。必须从本机进行连接,一个账户主机名应指定为 localhost ,另一个账户为实际的主机名或IP 号 。两个账户具有test 数据库或其它以test 开始的数据库的所有权限。

如前面所述,所有初始账户均没有密码。这意味着在你执行下述操作前,MySQL 安装未受保护:

·         如果你想要防止客户端不使用密码用匿名用户来连接,你应当为匿名账户指定密码或删掉匿名账户。

·         你应当为MySQL root 账户指定密码。

下面的说明描述了如何为初始MySQL 账户设置密码,先为匿名账户设置然后为root 账户设置。在例子中用实际密码替换“newpwd ”。说明还包括如果你不想用匿名账户访问,如何删掉匿名账户。

你可能想要在以后设置密码,因此不需要在进一步的设置或测试中指定密码。但是,一定要在实际生产作业、使用安装前设置好密码。

要想为匿名账户指定密码,可以使用SET PASSWORD 或UPDATE 。在两种情况中,一定要使用PASSWORD() 函数为密码加密。

在Windows 中使用PASSWORD 的方法:

shell> 
mysql -u root


mysql> 
SET PASSWORD FOR ''@'localhost' = PASSWORD('newpwd
');


mysql> 
SET PASSWORD FOR ''@'%' = PASSWORD('newpwd
');


在Unix 中使用PASSWORD 的方法:

shell> 
mysql -u root


mysql> 
SET PASSWORD FOR ''@'localhost' = PASSWORD('newpwd
');


mysql> 
SET PASSWORD FOR ''@'host_name
' = PASSWORD('newpwd
');


用服务器主机名替换第二个SET PASSWORD 语句中的host_name 。这是指定的user 表中的root non- localhost 记录的Host 列名。如果你不知道是哪个主机名,在SET PASSWORD 之前执行下面的语句:

mysql> 
SELECT Host, User FROM mysql.user;


查找在User 列有root 和在Host 列没有localhost 的记录。然后在第二个SET PASSWORD 语句中使用该Host 值。

为匿名账户指定密码的另一种方法是使用UPDATE 直接修改用户表。用root 连接服务器,运行UPDATE 语句为相应user 表记录的Password 列指定一个值。在Windows 和Unix 中的过程是相同的。下面的UPDATE 语句同时为两个匿名账户指定密码:

shell> 
mysql -u root


mysql> 
UPDATE mysql.user SET Password = PASSWORD('newpwd
')


    ->     
WHERE User = '';


mysql> 
FLUSH PRIVILEGES;


在user 表中直接使用UPDATE 更新密码后,必须让服务器用FLUSH PRIVILEGES 重新读授权表。否则,重新启动服务器前,不会使用更改。

如果你宁愿删除匿名账户,操作方法是:

shell> 
mysql -u root


mysql> 
DELETE FROM mysql.user WHERE User = '';


mysql> 
FLUSH PRIVILEGES;


可以在Windows 和Unix 中使用DELETE 语句。在Windows 中,如果你只想删掉具有与root 相同权限的匿名账户,方法为:

shell> 
mysql -u root


mysql> 
DELETE FROM mysql.user WHERE Host='localhost' AND User='';


mysql> 
FLUSH PRIVILEGES;


该账户允许匿名访问,但是拥有全部的权限,因此删掉它可以提高安全。

你可以用几种方法为root 账户指定密码。以下介绍了三种方法:

·         使用SET PASSWORD 语句

·         使用mysqladmin 命令行客户端程序

·         使用UPDATE 语句

要想使用SET PASSWORD 指定密码,用root 连接服务器并执行两个SET PASSWORD 语句。一定要使用PASSWORD() 函数来加密密码。

在Windows 中的语句:

shell> 
mysql -u root


mysql> 
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpwd
');


mysql> 
SET PASSWORD FOR 'root'@'%' = PASSWORD('newpwd
');


在Unix 中的语句:

shell> 
mysql -u root


mysql> 
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpwd
');


mysql> 
SET PASSWORD FOR 'root'@'host_name
' = PASSWORD('newpwd
');


用服务器主机名替换第二个SET PASSWORD 语句中的host_name 。这是你指定匿名账户密码的主机名。

要想使用mysqladmin 为root 账户指定密码,执行下面的命令:

  shell> mysqladmin
 -u root password "
newpwd


"
  shell> mysqladmin
 -u root -h 
host_name


 password "
newpwd


"

上述命令适用于Windows 和Unix 。用服务器主机名替换第二个命令中的host_name 。不一定需要将密码用双引号引起来,但是你如果密码中包含空格或专用于命令解释的其它字符,则需要用双引号引起来。

你还可以使用UPDATE 直接修改user 表。下面的UPDATE 语句可以同时为两个root 账户指定密码:

shell> 
mysql -u root


mysql> 
UPDATE mysql.user SET Password = PASSWORD('newpwd
')


    ->     
WHERE User = 'root';


mysql> 
FLUSH PRIVILEGES;


UPDATE 语句适用于Windows 和Unix 。

设置完密码后,当你连接服务器时你必须提供相应密码。例如,如果你想要用mysqladmin 关闭服务器,可以使用下面的命令:

shell> 
mysqladmin -u root -p shutdown


Enter password: 
(enter root password here)


注释: 如果你设置了root 密码后忘记了密码,从A.4.1节,“如何复位根用户密码” 中查阅重设密码的方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值