您的位置:首页 > 数据库 > MySQL

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

2016-02-28 13:23 796 查看

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.table
TO 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: 0

mysql> 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 mysql
MySQL 服务正在启动 .
MySQL 服务已经启动成功。

C:\WINDOWS\system32>net stop mysql
MySQL 服务正在停止.
MySQL 服务已成功停止。


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

C:\WINDOWS\system32>mysqld --skip-grant-tables
2016-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 root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server 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 its
affiliates. Other names may be trademarks of their respective
owners.

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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: