分类: Mysql/postgreSQL
2008-05-05 09:11:32
1)如果你不想要test数据库,启动服务器后,可以用 mysqladmin -u root drop test 卸掉。
2)要想重新创建授权表,从含有MySQL数据库的目录中移走所有 .frm、.MYI和 .MYD文件。(这是数据目录下面的mysql目录,当你运行mysqld --help 时,列为datadir值)。然后再次运行mysql_install_db 脚本。
3)使用mysqladmin验证服务器在运行中。以下命令提供了简单的测试,可检查服务器是否已经启动并能响应连接:
shell> bin/mysqladmin version
shell> bin/mysqladmin variables
4) 验证可以关闭服务器:
shell> bin/mysqladmin -u root shutdown
5)命令还可以这么用
shell> bin/mysqlshow
shell> bin/mysqlshow mysql
shell> bin/mysql -e "SELECT Host,Db,User FROM db" mysql
6)使初始MySQL账户安全
MySQL安装过程包括设置含有授权表的MySQL数据库,在Unix中,?strong>mysql_install_db程序来安装 授权表,授权表定义了初始MySQL用户账户和访问权限。
1. 用户root 创建两个账户。这些账户为超用户账户,可以执行任何操作。初始root账户的密码为空,因此任何人可以用root账户不用任何密码来连接MySQL服务器,并具有所有权限。
2. 在Unix中,两个root账户均用于从本机连接。必须从本机进行连接,一个账户主机名应指定为localhost,另一个账户为实际的主机名或IP号。
创建了两个匿名用户账户,每个账户的用户名均为空。匿名账户没有密码,因此任何人可以使用匿名账户来连接MySQL服务器。
在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)
7)当你修改授权表的内容时,确保你按你想要的方式更改权限设置是一个好主意。要检查给定账户的权限,使用SHOW GRANTS语句。例如,要检查Host和User值分别为pc84.example.com和bob的账户所授予的权限,应通过语句:
mysql> SHOW GRANTS FOR 'bob'@'pc84.example.com';
一个有用的诊断工具是mysqlaccess脚本,由Carlier Yves 提供给MySQL分发。使用--help选项调用mysqlaccess查明它怎样工作。注意:mysqlaccess仅用user、db和host表检查存取。它不检查tables_priv、columns_priv或procs_priv表中指定的表、列和程序级权限。
8)SET PASSWORD语法
SET PASSWORD = PASSWORD('some password')
SET PASSWORD FOR user = PASSWORD('some password')
SET PASSWORD语句用于向一个原有MySQL用户 账户赋予一个密码。
第一个语法为当前用户设置密码。已使用一个非匿名账户连接到服务器上的任何客户即都可以更改该账户的密码。
第二个语法为当前服务器主机上的一个特定账户设置密码。只有拥有mysql数据库UPDATE权限的客户端可以这么做。user值应以user_name@host_name的格式被给定,此处user_name和host_name与mysql.user表登录项的User和Host列中列出的完全一样。举例说明,如果您有一个登录项,User和Host列值为'bob'和'%.loc.gov',您应该按如下方法写语句:
mysql> SET PASSWORD FOR 'bob'@'%.loc.gov' = PASSWORD('newpass');
这相当于以下语句:
mysql> UPDATE mysql.user SET Password=PASSWORD('newpass')
-> WHERE User='bob' AND Host='%.loc.gov';
mysql> FLUSH PRIVILEGES;
还可以这么用
[marlin@LAMP ~]$ mysql -uroot -p -e "select user,host from user" mysql
Enter password:
+--------+-----------+
| user | host |
+--------+-----------+
| root | LAMP |
| marlin | localhost |
| root | localhost |
+--------+-----------+