新建MYSQL用户帐号方法

风清扬斈 13年前 (2007-10-12) 信息科技 3705 0

在MySQL中修改一个用户(比如叫"hunte")的密码,可以用如下3个办法:

  #在控制台上输入

  bash$ mysql -u root mysql

  #用mysql客户程序

  mysql> UPDATE user SET password=PASSWORD("new password") WHERE user=(i)hunte(i);

  mysql> FLUSH PRIVILEGES;

  mysql> QUIT

  #在控制台上输入

  bash$ mysql -u root mysql

  mysql> SET PASSWORD FOR hunte=PASSWORD((i)new password(i));

  mysql> QUIT

  #直接在控制台上输入

  bash$ mysqladmin -u root "old password" "new password"

有2个不同的方法增加用户:通过使用GRANT语句或通过直接操作MySQL授权表。比较好的方法是使用GRANT语句,因为他们是更简明并且好像错误少些。

WIND登陆 MYSQL -U ROOT -P

下面的例子显示出如何使用MySQL客户安装新用户。这些例子假定权限已缺省被安装。这意味着为了改变,你必须在MySQL正在运行同一台机器上,你必须作为MySQL root用户连接,并且root用户必须对MySQL数据库有insert权限和reload管理权限。另外,如果你改变了root用户口令,你必须如下的MySQL命令指定它。

你可以通过发出GRANT语句增加新用户:

shell> mysql --user=root mysql 
mysql> GRANT ALL PRIVILEGES ON *.* TO monty@localhost 
      IDENTIFIED BY (i)something(i) WITH GRANT OPTION; 
mysql> GRANT ALL PRIVILEGES ON *.* TO monty@"%" 
      IDENTIFIED BY (i)something(i) WITH GRANT OPTION; 
mysql> GRANT RELOAD,PROCESS ON *.* TO admin@localhost; 
mysql> GRANT USAGE ON *.* TO dummy@localhost;

这些GRANT语句安装3个新用户:

monty:可以从任何地方连接服务器的一个完全的超级用户,但是必须使用一个口令((i)something(i)做这个。注意,我们必须对monty@localhost和monty@"%"发出GRANT语句。如果我们增加localhost条目,对localhost的匿名用户条目在我们从本地主机连接接时由mysql_install_db创建的条目将优先考虑,因为它有更特定的Host字段值,所以以user表排列顺序看更早到来。

admin:可以从localhost没有一个口令进行连接并且被授予reload和process管理权限的用户。这允许用户执行mysqladmin reload、mysqladmin refresh和mysqladmin flush-*命令,还有mysqladmin processlist。没有授予数据库有关的权限。他们能在以后通过发出另一个GRANT语句授权。

dummy:可以不用一个口令连接的一个用户,但是只能从本地主机。全局权限被设置为(i)N(i)--USAGE权限类型允许你无需权限就可设置一个用户。它假定你将在以后授予数据库相关的权限。

你也可以直接通过发出INSERT语句增加同样的用户存取信息,然后告诉服务器再次装入授权表:

shell> mysql --user=root mysql 
mysql> INSERT INTO user VALUES((i)localhost(i),(i)monty(i),PASSWORD((i)something(i)), 
        (i)Y(i),(i)Y(i),(i)Y(i),(i)Y(i),(i)Y(i),(i)Y(i),(i)Y(i),(i)Y(i),(i)Y(i),(i)Y(i),(i)Y(i),(i)Y(i),(i)Y(i),(i)Y(i)) 
mysql> INSERT INTO user VALUES((i)%(i),(i)monty(i),PASSWORD((i)something(i)), 
        (i)Y(i),(i)Y(i),(i)Y(i),(i)Y(i),(i)Y(i),(i)Y(i),(i)Y(i),(i)Y(i),(i)Y(i),(i)Y(i),(i)Y(i),(i)Y(i),(i)Y(i),(i)Y(i)) 
mysql> INSERT INTO user SET Host=(i)localhost(i),User=(i)admin(i), 
         Reload_priv=(i)Y(i), Process_priv=(i)Y(i); 
mysql> INSERT INTO user (Host,User,Password) 
            VALUES((i)localhost(i),(i)dummy(i),(i)(i)); 
mysql> FLUSH PRIVILEGES;

取决于你的MySQL版本,对上述,你可能必须使用一个不同数目(i)Y(i)值(在3.22.11以前的版本有更少的权限列)。对admin用户,只用在3.22.11开始的版本具有的更加可读的INSERT扩充的语法。

注意,为了设置一个超级用户,你只需创造一个user表条目,其权限字段设为(i)Y(i)。不需要db或host表的条目。

在user表中的权限列不是由最后一个INSERT语句明确设置的(对dummy用户),因此那些列被赋予缺省值(i)N(i)。这是GRANT USAGE做的同样的事情。

下列例子增加一个用户custom,他能从主机localhost、server.domain和whitehouse.gov连接。他只想要从localhost存取bankaccount数据库,从whitehouse.gov存取expenses数据库和从所有3台主机存取customer数据库。他想要从所有3台主机上使用口令stupid。

为了使用GRANT语句设置个用户的权限,运行这些命令:

shell> mysql --user=root mysql 
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP 
      ON bankaccount.* 
      TO custom@localhost 
      IDENTIFIED BY (i)stupid(i); 
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP 
      ON expenses.* 
      TO custom@whitehouse.gov 
      IDENTIFIED BY (i)stupid(i); 
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP 
      ON customer.* 
      TO custom@(i)%(i) 
      IDENTIFIED BY (i)stupid(i);

通过直接修改授权表设置用户权限,运行这些命令(注意,在结束时FLUSH PRIVILEGES):

shell> mysql --user=root mysql 
mysql> INSERT INTO user (Host,User,Password) 
    VALUES((i)localhost(i),(i)custom(i),PASSWORD((i)stupid(i))); 
mysql> INSERT INTO user (Host,User,Password) 
    VALUES((i)server.domain(i),(i)custom(i),PASSWORD((i)stupid(i))); 
mysql> INSERT INTO user (Host,User,Password) 
    VALUES((i)whitehouse.gov(i),(i)custom(i),PASSWORD((i)stupid(i))); 
mysql> INSERT INTO db 
    (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv, 
    Create_priv,Drop_priv) 
    VALUES 
    ((i)localhost(i),(i)bankaccount(i),(i)custom(i),(i)Y(i),(i)Y(i),(i)Y(i),(i)Y(i),(i)Y(i),(i)Y(i)); 
mysql> INSERT INTO db 
    (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv, 
    Create_priv,Drop_priv) 
    VALUES 
    ((i)whitehouse.gov(i),(i)expenses(i),(i)custom(i),(i)Y(i),(i)Y(i),(i)Y(i),(i)Y(i),(i)Y(i),(i)Y(i)); 
mysql> INSERT INTO db 
    (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv, 
    Create_priv,Drop_priv) 
    VALUES((i)%(i),(i)customer(i),(i)custom(i),(i)Y(i),(i)Y(i),(i)Y(i),(i)Y(i),(i)Y(i),(i)Y(i)); 
mysql> FLUSH PRIVILEGES;

头3个INSERT语句增加user表条目,允许用户custom用给定口令从不同的主机进行连接,但是没有授予任何许可(所有权限被设置为缺省值(i)N(i))。后3个INSERT语句增加db表条目,授予custom以bankaccount、expenses和customer数据库权限,但是只能在从正确的主机存取时。通常,在授权表直接被修改时,服务器必须被告知再次装入他们(用FLUSH PRIVILEGES)以便使权限修改生效。

如果你想要给特定的用户从一个给定的域上的任何机器上存取权限,你可以发出一个如下的GRANT语句:

mysql> GRANT ... 
      ON *.* 
      TO myusername@"%.mydomainname.com" 
      IDENTIFIED BY (i)mypassword(i);

为了通过直接修改授权表做同样的事情,这样做:

mysql> INSERT INTO user VALUES ((i)%.mydomainname.com(i), (i)myusername(i), 
      PASSWORD((i)mypassword(i)),...); 
mysql> FLUSH PRIVILEGES;

你也可以使用xmysqladmin、mysql_webadmin甚至xmysql在授权表中插入、改变和更新值。你可以在MySQL的Contrib目录找到这些实用程序。


 1.修改mysql密码。

mysql默认用户root,密码为空,可以进入mysqlin目录执行mysqladmin命令修改密码,假如你现在用户为root密码为空,你想修改密码为123,你可以这样mysqladmin -uroot -p"" password 123修改,参数-u后面跟用户名,可以有空格,-p后面紧跟密码,不能有空格,密码为空要用“”表示。mysqladmin -u  root -p123 password ""这样我们把密码由123又改为了空。

2.执行mysqlinmysqld-nt --install后,net start mysql 无法开启mysql服务,提示“系统发生错误 1067。” 

看看mysql目录下面有没有my.ini,没有的话找个my-small.ini或my-medium.ini改为my.ini 然后 c:mysqlinmysqld --install mysql --defaults-file=C:mysqlmy.ini

3.改了mysql密码后phpmyadmin不能管理mysql了,提示#1045 - Access denied for user (i)root(i)@(i)localhost(i) (using password: NO)。

看看phpmyadmin目录下面有没有config.inc.php,我用的是phpMyAdmin-2.10.0.2,把config.sample.inc.php改为config.inc.php就ok了。

4.登陆phpmyadmin管理的时候出现The configuration file now needs a secret passphrase (blowfish_secret)错误。

把phpmyadminconfig.inc.php文件里的$cfg[(i)blowfish_secret(i)] = (i)(i)添加几个字符,如$cfg[(i)blowfish_secret(i)] = (i)www(i)

5.登陆phpmyadmin管理的时候出现#1251 - Client does not support authentication protocol requested by server错误。

出现这种问题也只有在MYSQL4.1.x以上版本,用4.0.x就没问题了。原因是因为你使用的mysql服务器版本中使用了新的密码验证机制,这需要客户端的版本要在4.0以上,原来的密码函数被改为old_password ();,这样使用password()生成的密码在旧的版本上的客户端就不好使了,而PHP中的MYSQL客户端都是3.23的(当然,mysqli的扩展除外)。

目前已知解决方法:
(1)root用空密码,就是默认不用密码。
(2)先用root登录MYSQL服务器,然后执行
mysql>set password for (i)root(i)@(i)localhost(i)=old_password((i)你的密码(i));
这里root为管理员用户名,如果你修改成了其他的,这里就输入你修改后的名字,你的密码输入你开始设置的管理员密码,上面的字符一个都不能少,从set这里开始输入到最后的;符号也要输入。

MySQL导出导入命令的用例
  1.导出整个数据库

  mysqldump -u 用户名 -p 数据库名 > 导出的文件名

  mysqldump -u wcnc -p smgp_apps_wcnc > wcnc.sql

  2.导出一个表

  mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名

  mysqldump -u wcnc -p smgp_apps_wcnc users> wcnc_users.sql

  3.导出一个数据库结构

  mysqldump -u wcnc -p -d --add-drop-table smgp_apps_wcnc >d:wcnc_db.sql

  -d 没有数据 --add-drop-table 在每个create语句之前增加一个drop table

  4.导入数据库

  常用source 命令

  进入mysql数据库控制台,

  如mysql -u root -p

  mysql>use 数据库

  然后使用source命令,后面参数为脚本文件(如这里用到的.sql)

  mysql>source d:wcnc_db.sql

备份:
 1. mysqldump -h 61.139.112.56 -u root -p test >d:/test_db.2005-03-02.sql
 2. mysqldump  -h 61.139.112.56 -u root -p test table1 table2 >d:/test12.sql
 3. mysqldump  -h 61.139.112.56 -u root -p test |gzip>d:/testz.gz

 恢复
  1. mysql testdb <d:/test_db.2005-03-02.sql
     mysql>source test_db.2005-03-02.sql


解决phpmyadmin不能登录的问题 (mysql.4.1.x)  
MySQL 4.1 and up uses an authentication protocol based on a password hashing algorithm that is incompatible with that used by older clients. If you upgrade the server to 4.1, attempts to connect to it with an older client may fail with the following message: 
shell> mysql 
Client does not support authentication protocol requested 
by server; consider upgrading MySQL client 


To solve this problem, you should use one of the following approaches: 

Upgrade all client programs to use a 4.1.1 or newer client library. 

When connecting to the server with a pre-4.1 client program, use an account that still has a pre-4.1-style password. 

Reset the password to pre-4.1 style for each user that needs to use a pre-4.1 client program. This can be done using the SET PASSWORD statement and the OLD_PASSWORD() function: 

mysql> SET PASSWORD FOR 
-> (i)some_user(i)@(i)some_host(i) = OLD_PASSWORD((i)newpwd(i));   //localhost 设置新的密码


alternatively, use update and FLUSH PRIVILEGES: 

mysql> update mysql.user SET Password = OLD_PASSWORD((i)newpwd(i)) 
-> where Host = (i)some_host(i) AND User = (i)some_user(i);   //刷新密码格式,以便兼容新版本
mysql> FLUSH PRIVILEGES; 


Substitute the password you want to use for ``newpwd(i)(i) in the preceding examples. MySQL cannot tell you what the original password was, so you(i)ll need to pick a new one. 

Tell the server to use the older password hashing algorithm: 

Start mysqld with the --old-passwords option. 

Assign an old-format password to each account that has had its password updated to the longer 4.1 format. You can identify these accounts with the following query: 

mysql> select Host, User, Password FROM mysql.user 
-> where LENGTH(Password) > 16; 


For each account record displayed by the query, use the Host and User values and assign a password using the OLD_PASSWORD() function and either SET PASSWORD or update, as described earlier. 

For additional background on password hashing and authentication, see Section 5.5.9, "Password Hashing in MySQL 4.1".  
  
  
  
 

"

相关推荐

  • 网友评论

    • (*)

    最新评论