MySQL知识(二十)——用户账户管理

来源:互联网 发布:淘宝号怎样快速升心 编辑:程序博客网 时间:2024/05/08 14:41

1 登录和退出MySQL服务器

  (1)登录

mysql 参数

  mysql命令的常用参数:

参数 描述 -h,- -host=name 指定主机名或ip,默认是localhost -u,- -user=name 指定用户名 -p(小写),- -password[=pwd] 指定登录密码。如果该字段后面有一段字符,则该段字符串将作为密码直接登录。如果后面没有内容,则登录时会提示输入密码。注意该参数后面的字符串和-p之间不能有空格 -P(大写),- -port=# 指定mysql服务器的端口号,默认为3306 -V(大写),- -version 输出版本信息并且退出 数据库名 可以在命令的最后指定数据库名 -e 指定了该参数,将在登录后执行-e后面的命令或sql语句并退出

例如:

C:\Users\asus>mysql -u root -p -h localhost test -e"desc book;"Enter password: ****+------------------+--------------+------+-----+---------+-------+| Field            | Type         | Null | Key | Default | Extra |+------------------+--------------+------+-----+---------+-------+| bookid           | int(11)      | NO   |     | NULL    |       || bookname         | varchar(255) | NO   | MUL | NULL    |       || authors          | varchar(255) | NO   |     | NULL    |       || info             | varchar(255) | YES  |     | NULL    |       || comment          | varchar(255) | YES  |     | NULL    |       || year_publication | year(4)      | NO   | MUL | NULL    |       |+------------------+--------------+------+-----+---------+-------+

  (2)退出服务器
  输入quit或exit即可。

2 新建普通用户

2.1 使用CREATE USER语句

  执行CREATE USER或GRANT语句时,服务器会修改相应的用户授权表,添加或修改用户及其权限。

CREATE USER user_specification  [,user_specification]...user_specification:  user@host  [    IDENTIFIED BY [PASSWORD] 'password'    |IDENTIFIED WITH auth_plugin [AS 'auth_string']  ]
  • user:用户的名称
  • host:允许登录的用户主机名称
  • IDENTIFIED BY:用来设置用户的密码
  • [PASSWORD]:表示使用哈希值设置密码,可选
  • ‘password’:用户登录的普通明文密码
  • IDENTIFIED WITH:为用户指定一个身份验证插件
  • auth_plugin:插件名
  • auth_string:该参数将传递给身份验证插件,由该插件解释该参数的意义

例如,创建一个用户,名为jtzeng,密码是jtzeng123,主机名是localhost:

mysql> CREATE USER 'jtzeng'@'localhost' IDENTIFIED BY 'jtzeng123';Query OK, 0 rows affected (0.00 sec)

  如果只指定用户名部分,主机名部分则默认为'%'(即对所有的主机开发权限)。
  如果指定用户登录不需要密码,可以省略IDENTIFIED BY部分。

2.2 使用GRANT语句

  CREATE USER语句创建的新用户没有任何权限,还需要使用GRANT语句赋予用户权限。
  使用GRANT语句不仅可以创建新用户,还可以在创建的同时对用户授权。推荐使用GRANT语句来创建新用户。

GRANT privileges ON db.tableTO user@host [IDENTIFIED BY 'password'][,user[IDENTIFIED BY 'password']][WITH GRANT OPTION];
  • privileges:表示赋予用户的权限类型
  • db.table:用户权限所在的数据库中的表
  • WITH GRANT OPTION:可选,表示对新建立的用户赋予GRANT权限,即该用户可以对其他用户赋予权限。

例如,新建用户testUser,密码testpwd,并授予用户对所有的数据表的SELECT和UPDATE权限:

mysql> GRANT SELECT,UPDATE ON *.* TO 'testUser'@'localhost'    -> IDENTIFIED BY 'testpwd';Query OK, 0 rows affected (0.00 sec)mysql> SELECT Host,User,Select_priv,Update_priv    -> FROM mysql.user    -> WHERE user='testUser';+-----------+----------+-------------+-------------+| Host      | User     | Select_priv | Update_priv |+-----------+----------+-------------+-------------+| localhost | testUser | Y           | Y           |+-----------+----------+-------------+-------------+1 row in set (0.00 sec)

2.3 直接操作MySQL用户表

  可以使用INSERT语句向user表中直接插入一条记录来创建一个新的用户,但必须拥有对mysql.user表的INSERT权限。

INSERT INTO mysql.user(Host,User,Password,[privilegelist])VALUES('host','username',PASSWORD('password'),privilegevaluelist);

  privilegelist表示用户的权限,可以有多个权限;PASSWORD()函数为密码加密函数;privilegevaluelist为对应的权限的值,只能取值Y或N。

例子:

mysql> INSERT INTO mysql.user(Host,User,Password)    -> VALUES('localhost','customer1',PASSWORD('customer1'));Query OK, 1 row affected, 3 warnings (0.01 sec)mysql> SHOW WARNINGS;+---------+------+---------------------------------------------------+| Level   | Code | Message                                           |+---------+------+---------------------------------------------------+| Warning | 1364 | Field 'ssl_cipher' doesn't have a default value   || Warning | 1364 | Field 'x509_issuer' doesn't have a default value  || Warning | 1364 | Field 'x509_subject' doesn't have a default value |+---------+------+---------------------------------------------------+3 rows in set (0.00 sec)

  出现警告,三个字段在user表中没有默认值。

FLUSH PRIVILEGES;

重新加载授权表。

3 删除普通用户

3.1 DROP USER语句

DROP USER user[,user];

例如:

mysql> DROP USER 'jtzeng'@'localhost';Query OK, 0 rows affected (0.00 sec)mysql> select host,user,password from mysql.user;+-----------+-----------+-------------------------------------------+| host      | user      | password                                  |+-----------+-----------+-------------------------------------------+| localhost | root      | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B || 127.0.0.1 | root      | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B || ::1       | root      | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B || localhost |           |                                           || localhost | testUser  | *22CBF14EBDE8814586FF12332FA2B6023A7603BB || localhost | customer1 | *73DA97747611396FD898E4A7E42B1097B0780646 |+-----------+-----------+-------------------------------------------+6 rows in set (0.00 sec)

3.2 DELETE语句

DELETE FROM MYSQL.user WHERE host='hostname' and user='username';

例如:

mysql> DELETE FROM MYSQL.user WHERE host='localhost' and user='customer1';Query OK, 1 row affected (0.00 sec)mysql> select host,user,password from mysql.user;+-----------+----------+-------------------------------------------+| host      | user     | password                                  |+-----------+----------+-------------------------------------------+| localhost | root     | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B || 127.0.0.1 | root     | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B || ::1       | root     | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B || localhost |          |                                           || localhost | testUser | *22CBF14EBDE8814586FF12332FA2B6023A7603BB |+-----------+----------+-------------------------------------------+5 rows in set (0.00 sec)

4 root用户修改自己密码

4.1 使用mysqladmin命令

在Windows命令行窗口输入:

mysqladmin -u username -h localhost -p password "新的密码"

例如:

mysqladmin -u root -p password "rootpwd"Enter password:

按照提示要求输入root用户原来的密码后即可。

4.2 修改mysql.user表

UPDATE myslq.user SET Password=PASSWORD("新的密码") WHERE User="root" AND Host="localhost";

4.3 使用SET语句

  直接使用SET PASSWORD语句

SET PASSWORD=PASSWORD("新的密码");

例如,设置当前用户密码:

mysql> SET PASSWORD=PASSWORD("rootpwd");Query OK, 0 row affected (0.00 sec)

5 root用户修改普通用户密码

5.1 使用SET语句

SET PASSWORD FOR 'user'@'host'=PASSWORD('新的密码');

例如,修改testUser用户的密码为“newpwd”:

mysql> SET PASSWORD FOR 'testUser'@'localhost'=PASSWORD("newpwd");Query OK, 0 rows affected (0.00 sec)

5.2 使用UPDATE语句

UPDATE MYSQL.user SET Password=PASSWORD("pwd")WHERE User="username" AND Host="hostname";

例如,修改testUser用户的密码为“newpwd2”:

mysql> UPDATE MYSQL.user SET Password=PASSWORD("newpwd2")    -> WHERE User="testUser" AND Host="localhost";Query OK, 1 row affected (0.00 sec)Rows matched: 1  Changed: 1  Warnings: 0mysql> FLUSH PRIVILEGES;Query OK, 0 rows affected (0.00 sec)

5.3 使用GRANT语句(推荐使用)

GRANT USAGE ON *.* TO 'someuser'@'%' IDENTIFIED BY 'somepassword';

例如,修改testUser用户的密码为“newpwd3”:

mysql> GRANT USAGE ON *.* TO 'testUser'@'localhost' IDENTIFIED BY 'newpwd3';Query OK, 0 rows affected (0.00 sec)

6 普通用户修改密码

SET PASSWORD=PASSWORD("新的密码");

7 root用户密码丢的解决办法

第1步 使用- -skip-grant-tables选项启动MySQL服务

  以skip-grant-tables选项启动时,MySQL服务器将不加载权限判断,任何用户都能访问数据库。
  (1)windows系统下

mysqld --skip-grant-tables

或者

mysqld-nt --skip-grant-tables

  (2)Linux系统下

mysqld_safe --skip-grant-tables user=mysqld

或者

/ect/init.d/mysqld start-mysqld --skip-grant-tables

第2步 使用root用户登录,重新设置密码

例子(window系统下):
(1)使用net stop mysql命令停止mysql服务器。(需要管理员身份打开命令行窗口)

C:\WINDOWS\system32>net start mysqlMySQL 服务正在启动 .MySQL 服务已经启动成功。C:\WINDOWS\system32>net stop mysqlMySQL 服务正在停止.MySQL 服务已成功停止。

(2)使用mysqld - -skip-grant-tables启动服务器

C:\WINDOWS\system32>mysqld --skip-grant-tables2016-02-28 13:09:40 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).2016-02-28 13:09:40 0 [Note] mysqld (mysqld 5.6.24) starting as process 8864 ...

(3)命令运行之后,用户无法输入指令,此时如果在任务管理器中可以看到名称为mysqld的进程,则表示可以受用root用户登录MySQL了。此时重新打开一个命令行窗口,输入:

C:\WINDOWS\system32>mysql -u rootWelcome to the MySQL monitor.  Commands end with ; or \g.Your MySQL connection id is 1Server version: 5.6.24 MySQL Community Server (GPL)Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>

(4)登录成功后,可以使用UPDATE语句或mysqladmin命令重新设置root密码

第3步 加载权限表

重新加载权限表,新密码才生效

mysql> FLUSH PRIVILEGES;Query OK, 0 rows affected (0.00 sec)
1 0
原创粉丝点击