一、用户授权的基本操作下面我们就讨论一下如何设置密码:首先我们应该知道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
因为在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
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';
MySQL 默认有四个用户,最好删除除 root ,localhost,带加密密码 以外的其他3个用户。最后要重新启动数据库才能生效!
这里需要说明的是“FLUSH PRIVILEGES;”这条命令,
它起到了重新加载授权表的作用。
你也可以在shell下直接用 mysqladmin -u root reload
或者 mysqladmin -u root flush-privileges 来实现重载授权表。最可怕的是,你忘了删除那条 % root 空密码 的记录, 那样,除了你本机外的任意一个地址将彻底控制你的数据库。