一、用户授权的基本操作下面我们就讨论一下如何设置密码:首先我们应该知道MySQL数据库中的口令存储必须用Password()函数加密它。
因为在user表中是以加密形式存储口令,而不是作为纯文本。
如果你没有加密,直接在数据库中执行以下语句:USE mysql 
INSERT INTO user (Host,User,Password) VALUES('%','user_name','your password'); 
FLUSH PRIVILEGES;
 
相信结果将会令你很失望。
因为服务器比较的是加密的值,所以服务器连接一定失败。
这里需要说明的是“FLUSH PRIVILEGES;”这条命令,
它起到了重新加载授权表的作用。
你也可以在shell下直接用 mysqladmin -u root reload
或者 mysqladmin -u root flush-privileges 来实现重载授权表。在MySQL环境下,你可以使用以下语句进行设置密码:
   1、INSERT INTO user(Host,User,Password) VALUES('%','user_name',Password("your password"); 
   2、SET PASSWORD FOR user_name = password("your password") 
以上两种方法都必须进行重载授权表。 
   3、当然你也可以在创建一个用户时直接设置密码,grant语句将为你自动加密口令. 
      如 grant all on *.* to user_name@% identified by "your password"; 
   4、另外你也可以在shell环境下用mysqladmin程序来设置密码
      如 mysqladmin -u root password "your password" 如果你正在使用在windows下的MySQL共享软件版本,
上面的命令将以 parse error near 'SET OPTION password'的错误而失败,
这是因为,这是共享软件版本,没有SET PASSWORD命令。 
对共享软件版本,你能如下设置root用户口令: 
C:\mysql\bin\mysql mysql
mysql> UPDATE user SET Password=PASSWORD('your password') WHERE User='root';
mysql> QUIT
C:\mysql\bin\mysqladmin reload

解决方案 »

  1.   

    我是载linux下面的,我的意思是设置了密码,是不是root只能在本地连接,在外部不能连接,linux下面按装好了,我启动mysql服务,要做些什么安全工作,谢谢啦
      

  2.   

    在 mysql.user 中有这么三个字段Host, User, Password 
     Host 
      Host列值可以是一个主机名、一个IP地址或'localhost'指出本地主机。
      你可以在Host字段里使用通配符字符“%”和“_”。
      %值匹配所有主机,并可用于允许一个用户从任何地方连接。一个空白的Host值等同于%。
      如%wisc.edu匹配任何wisc.edu域内的主机,而%.edu匹配任何教育学院的主机。
      类似地,192.168.%匹配任何在192.168 B类子网的主机,
      而192.168.3.%匹配任何在192.168.3 C类子网的主机。
     (例外:在db表中,一个空白Host值含义是“进一步检查host表”)User 
      用户名必须是文字的或空白。
      User字段中不支持通配符,但是你能指定一个空白值匹配任何用户。
      %作为一个User值并不意味着空白,相反地它匹配一个字面上的%名字,这可能不是你想要的。Password 
      口令值可以是空或非空,不允许用通配符。
      一个空口令并不意味着匹配任何口令,它意味着用户连接服务器时不得指定口令。
      口令是以一个加密过的值存储的,而不是一个字面上的文本。
      如果你在Password列中存储一个实际字面上的口令,用户将不能连接!
      GRANT语句和mysqladmin password命令为你自动加密口令,
      但是如果你用诸如INSERT、REPLACE、UPDATE或SET PASSWORD等命令,
      一定要用PASSWORD("new_password")函数而不是简单的"new_password"来指定口令。 
      例如 UPDATE user SET Password=PASSWORD('your password') WHERE User='root';
      

  3.   

    shuixin13 已经贴得很详细了,关键是不要有空密码,特别是root等权限比较高的用户,MySQL 默认有四个用户,其中两个和root相关,一个是从本机登录的root,一个任意主机,root 从外部当然可以连接。
      

  4.   

    补充:
    MySQL 默认有四个用户,最好删除除 root ,localhost,带加密密码 以外的其他3个用户。最后要重新启动数据库才能生效!
      

  5.   

    也就是: 同上
    这里需要说明的是“FLUSH PRIVILEGES;”这条命令,
    它起到了重新加载授权表的作用。
    你也可以在shell下直接用 mysqladmin -u root reload
    或者 mysqladmin -u root flush-privileges 来实现重载授权表。最可怕的是,你忘了删除那条 % root 空密码 的记录, 那样,除了你本机外的任意一个地址将彻底控制你的数据库。