概述
一. 登录和退出 MySQL 服务器
mysql 命令的常用参数:
参数 | 描述 |
---|---|
-h,- -host=name | 指定主机名或ip,默认是localhost |
-u,- -user=name | 指定用户名 |
-p(小写),- -password[=pwd] | 指定登录密码。如果该字段后面有一段字符,则该段字符串将作为密码直接登录。如果后面没有内容,则登录时会提示输入密码。注意该参数后面的字符串和-p之间不能有空格 |
-P(大写),- -port=# | 指定 mysql 服务器的端口号,默认为3306 |
-V(大写),- -version | 输出版本信息并且退出 |
无从参数数据库名 | 可以在命令的最后指定数据库名 |
-e | 指定了该参数,将在登录后执行-e后面的命令或sql语句并退出 |
1. 登录MySQL 服务器。
【例】 使用 root 用户登录本地 MySQL 服务器 test_db 库。
命令执行如下:
C:> mysql -h localhost -u root -p test_db
Enter password: *************
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 8
Server version: 5.7.21-log MySQL Community Server (GPL)
Copyright (c) 2000, 2018, 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.
【例】 使用 root用户登录到本地 MySQL 服务器的 test_db 数据库,同时执行一条查询语句。
命令如下:
C:>mysql -h localhost -u root -p test_db -e "DESC fruits;"
Enter password: *************
+---------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| f_id | char(10) | NO | PRI | NULL | |
| s_id | int(11) | NO | | NULL | |
| f_name | char(255) | NO | | NULL | |
| f_price | decimal(8,2) | NO | | NULL | |
+---------+--------------+------+-----+---------+-------+
C:>
查询返回之后自动退出 MySQL 服务器。
2. 退出MySQL 服务器。
输入 quit 或 exit 即可。
【例】退出MySQL 服务器
mysql> exit;
Bye
C:>
二. 新建普通用户
创建新用户,必须要有相应的权限来执行创建操作。在 MySQL 数据库中,有两种方式创建新用户,一种是使用 CREATE USER 或 GRANT 语句;另一种是直接操作 MySOL 授权表。最好的方法是使用 GRANT 语句,因为这样更精确、错误少。
1. 使用 CREAT EUSER 语句创建新用户
执行 CREATE USER 或 GRANT 语句时,服务器会修改相应的用户授权表,添加或修改用户及其权限。
CREATE USER 语句的语法格式如下:
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:该参数将传递给身份验证插件,由该插件解释该参数的意义
【例】 使用 CREATE USER 创建一个用户, 用户名是 zth , 密码是 zthfbb ,主机名是 localhost。语句如下:
mysql> CREATE USER 'zth' @'localhost' IDENTIFIED BY 'zthfbb';
Query OK, 0 rows affected (0.15 sec)
- 如果只指定用户名部分,主机名部分则默认为%(即对所有的主机开发权限)。
- 如果指定用户登录不需要密码,可以省略IDENTIFIED BY部分。
为了避免指定明文密码,如果知道密码的哈希值,可以通过 PASSWORD 关键字使用密码的哈希值设置密码。
密码的哈希值可以使用 password() 函数获取,例:
mysql> SELECT password('zth');
+-------------------------------------------+
| password('zth') |
+-------------------------------------------+
| *5B0FFF997FE144F3E17C50F8EF91AC634DEFBF86 |
+-------------------------------------------+
*5B0FFF997FE144F3E17C50F8EF91AC634DEFBF86 就是 zth 的哈希值。
【例】 使用 CREATE USER 创建一个用户, 用户名是 zth , 密码是 zth 的哈希值 ,主机名是 localhost。语句如下:
mysql> CREATE USER 'zth' @'localhost' IDENTIFIED BY PASSWORD '*5B0FFF997FE144F3E17C50F8EF91AC634DEFBF86';
Query OK, 0 rows affected, 1 warning (0.00 sec)
用户 zth 的密码将被设定为 zth 。
对于使用插件认证连接的用户,服务器调用指定名称的插件,客户端需要提供验证方法所需要的凭据。如果创建用户时或者连接服务器时,服务器找不到对应的插件,将返回一个错误。
IDENTIFIED BY 和 IDENTIFIED WITH 是互斥的,所以对于一个账户来说只能使用一个验证方法。
CREATE USER 语句的操作会被记录到服务器日志文件或者操作历史文件中。这意味着对这些文件有读取权限的人,都可以读取新添加用户的明文密码。
2. 使用 GRANT 语向创建新用户
用 CREATE USER 语句可以在 user 表中添加一条新的记录, 但是用 CREATE USER 语句创建的新用户没有任何权限,
还需要用 GRANT 语句赋予用户权限。而 GRANT 语句不仅可以创建新用户,还可以在创建的同时对用户授权。GRANT 还可以指定账户的其他特点,如使用安全连接、限制使用服务器资源等。使用 GRANT 语句创建新用户时必须有 GRANT 权限。GRANT 语句是添加新用户并授权他们访问 MySOL 对象的首选方法。
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 权限,即该用户可以对其他用户赋予权限。
【例】用 GRANT 语句创建个新的用户 fbb ,密码为 fbb, 并授予用户对 所有数据表的 SELECT 和 UPDATE 权限。GRANT语句及其执行结果如下:
mysql> GRANT SELECT,UPDATE ON *.* TO 'fbb' @'localhost'
-> IDENTIFIED BY 'fbb';
Query OK, 0 rows affected, 1 warning (0.00 sec)
使用 SELECT 语句查询用户 fbb 的权限:
mysql> SELECT Host, User, Select_priv , Update_priv FROM mysql.user where user='fbb';
+-----------+------+-------------+-------------+
| Host | User | Select_priv | Update_priv |
+-----------+------+-------------+-------------+
| localhost | fbb | Y | Y |
+-----------+------+-------------+-------------+
【注】User 表中的 User 和 Host 字段区分大小写,在查询的时候要指定正确的用户名称或者主机名。
3. 直接操作MySQL用户表
不管是用 CREATE USER 还是 GRANT 语句,在创建新用户时,实际上都是在 user 表中添加一条新的记录。因此,可以使用 INSERT 语句向 user 表中直接插入一条记录来创建一个新的用户。使用 INSERT 语句,必须拥有对 mysql.user 表的INSERT 权限。使用 INSERT 语句创建新用户的基本语法格式如下:
INSERT INTO mysql.user( Host, User, authentication_string , [ privilegelist ] )
VALUES ( 'host', 'username', PASSWORD('password'), privilegevaluelist );
- privilegelist 表示用户的权限,可以有多个权限;
- PASSWORD() 函数为密码加密函数;
- privilegevaluelist 为对应的权限的值,只能取值Y或N。
【例】 使用 INSERT 创建一个新账户,用户名为 customer1 ,主机名为 localhost,密码为 customer1 。
mysql> INSERT INTO user( Host, User, authentication_string)
-> VALUES( 'localhost','customer1',PASSWORD('customer1'));
ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value
语句执行失败,查看错误信息:
mysql> show WARNINGS;
+---------+------+-------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+-------------------------------------------------------------------+
| Warning | 1681 | 'PASSWORD' is deprecated and will be removed in a future release. |
| Error | 1364 | Field 'ssl_cipher' doesn't have a default value |
| Error | 1364 | Field 'x509_issuer' doesn't have a default value |
| Error | 1364 | Field 'x509_subject' doesn't have a default value |
+---------+------+-------------------------------------------------------------------+
重新加载授权表。
FLUSH PRIVILEGES;
因为上面三个字段在 user 表定义中没有默认值。使用 SELECT 语句查看 user 表中的记录:
mysql> SELECT host ,user, authentication_string FROM user;
+-----------+---------------+-------------------------------------------+
| host | user | authentication_string |
+-----------+---------------+-------------------------------------------+
| localhost | root | *87F94C1C734EA39689DE0B7178987B6B4675D5E6 |
| localhost | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| localhost | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| localhost | zth | *5B0FFF997FE144F3E17C50F8EF91AC634DEFBF86 |
| loacahost | fbb | *8E9930B2EE58996B9FEDC5B07765F1730E17426D |
+-----------+---------------+-------------------------------------------+
可看出添加没有成功。
三. 删除普通用户
1. 使用 DROP USER 语句删除用户
语法格式如下:
DROP USER user [ , user ] ;
要使用 DROP USER 语句,必须拥有 MySQL 数据库的全局 CREATE USER 权限或 DELETE 权限。
使用 DROP USER 删除一个账户及其权限的操作如下:
DROP USER 'user'@'localhost' ;
DROP USER;
第 1 条语句可以删除 user 在本地登录的权限;第2条语句可以删除所有授权表中的该账户权限记录。【例】使用 DROP USER 在 localhost 主机上删除 fbb 账户。SQL语句如下:
mysql> DROP USER 'fbb'@'localhost';
Query OK, 0 rows affected (0.00 sec)
查看执行结果:
mysql> SELECT host ,user, authentication_string FROM user;
+-----------+---------------+-------------------------------------------+
| host | user | authentication_string |
+-----------+---------------+-------------------------------------------+
| localhost | root | *87F94C1C734EA39689DE0B7178987B6B4675D5E6 |
| localhost | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| localhost | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| localhost | zth | *5B0FFF997FE144F3E17C50F8EF91AC634DEFBF86 |
+-----------+---------------+-------------------------------------------+
【注】DROP USER 不能自动关闭任何打开的用户对话。而且,如果要删除有打开的对话的用户时,命令不会生效,直到用户对话被关闭后才能生效。一旦对话被关闭,用户也被取消,此用户再次试图登录时将会失败。
2. 使用 DELETE 语句删除用户
语法格式如下:
DELETE FROM MYSQL.user WHERE host='hostname' and user='username';
【例】使用 DELETE 在 localhost 主机上删除 zth 账户。SQL 语句如下:
mysql> DELETE FROM MySQL.user WHERE host='localhost' AND user='zth';
Query OK, 1 row affected (0.09 sec)
查看执行结果:
mysql> SELECT host ,user, authentication_string FROM user;
+-----------+---------------+-------------------------------------------+
| host | user | authentication_string |
+-----------+---------------+-------------------------------------------+
| localhost | root | *87F94C1C734EA39689DE0B7178987B6B4675D5E6 |
| localhost | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| localhost | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
+-----------+---------------+-------------------------------------------+
四. root 用户修改自己的密码
1. 使用 mysqladmin 命今在命令行指定新密码
语法格式如下:
mysqladmin -u username -h localhost -p password "newpwd"
- usemame 为要修改密码的用户名称,在这里指定为 root 用户;
- 参数 -h 指需要修改的服务器地址,该参数可以不写,默认是 localhost ;
- -P 表示输入当前密码;
- pssword 为关键字,后面双引号内的内容 newpwd 为新设置的密码。
【例】使用 mysqladmin 将 root 用户的密码修改为 1530738736。在 Windows 的命令行窗口中执行如下命令:
C:>mysqladmin -u root -h localhost -p password "1530738736"
Enter password: *************
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.
2. 修改 mysql 数据库的 user 表
因为所有账户信息都保存在 user 表中,因此可以通过直接修改 user 表来改变 root 用户的密码。
语法格式如下:
UPDATE myslq.user SET authentication_string= PASSWORD("rootpwd") WHERE User="root" AND Host="localhost";
PASSWORD() 函数用来加密用户需码。
执行 UPDATE 语句后,需要执行 FLUSH PRIVILEGES 语句重新加载用户权限。
【例】 使用 UPDATE 语句将 root 用户的密码修改为 zth1530738736。SQL语句如下:
mysql> UPDATE mysql.user SET authentication_string = PASSWORD("zth1530738736")
-> WHERE User="root" AND Host="localhost";
Query OK, 1 row affected, 1 warning (0.10 sec)
Rows matched: 1 Changed: 1 Warnings: 1
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.18 sec)
3. 使用 SET 语句修改 root 用户的密码
用 SET PASSWORD 语句可以重新设置其他用户的登录密码或者自己使用的账户的密码。修改自身密码的语法结构如下:
SET PASSWORD = PASSWORD("rootpwd");
新密码必须使用PASSWORDO函数加密。
【例】 使用 UPDATE 语句将 root 用户的密码修改为 zth1530738736。SQL语句如下:
mysql> SET PASSWORD=password("zth1530738736");
Query OK, 0 rows affected, 1 warning (0.02 sec)
为了使更改生效,需要重新启动 MySQL 或者使用 FLUSH PRIVILEGES 语句刷新权限,重新加载权限表。
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.02 sec)
五. root 用户修改普通用户密码
1. 使用 SET 语向修改普通用户的密码
语法格式如下:
SET PASSWORD FOR 'user'@'host'=PASSWORD('新的密码');
【例】使用 SET 语句将 zth 用户的密码修改为 zth,使用 root 用户登录 MySQL 服务器后,执行如下语句:
mysql> SET PASSWORD FOR 'zth'@'localhost' =PASSWORD('zth');
Query OK, 0 rows affected, 1 warning (0.00 sec)
2. 使用 UPDATE 语句修改普通用户的密码
语法格式如下:
UPDATE MYSQL.user SET authentication_string=PASSWORD("pwd")
WHERE User="username" AND Host="hostname";
【例】使用 SET 语句将 zth 用户的密码修改为 zthfbb,使用 root 用户登录 MySQL 服务器后,执行如下语句:
mysql> UPDATE MySQL.user SET authentication_string=PASSWORD("zthfbb")
-> WHERE user="zth" AND Host="localhost";
Query OK, 1 row affected, 1 warning (0.04 sec)
Rows matched: 1 Changed: 1 Warnings: 1
3. 使用 GRANT 语句修改普通用户密码
可以在全局级别使用 GRANT USAGE 语句(*.*)指定某个账户的密码而不影响账户当前的权限。使用 GRANT 语句修改密码,必须拥有 GRANT 权限。一般情况下最好使用该方法来指定或修改密码。
语法格式如下:
GRANT USAGE ON *.* TO 'someuser'@'%' IDENTIFIED BY 'somepassword';
【例】使用 GRANT 语句将 zth 用户的密码修改为 zth,使用 root 用户登录 MySQL 服务器后,执行如下语句:
mysql> GRANT USAGE ON *.* TO 'zth'@'localhost' IDENTIFIED BY 'zth';
Query OK, 0 rows affected, 1 warning (0.00 sec)
如果使用 GRANT、IDENTIFIED BY 语句或 mysqladmin password 命令设置密码,密码均会加密。在这种情况下不需要使用 PASSWORD() 函数。
六. 普通用户修改密码
语法格式:
SET PASSWORD = PASSWORD("新的密码");
【例】 zth 用户使用 SET 语句将自身的密码修改为 zthfbb。使用 zth 用户登录 MySQL 服务器后,执行如下语句:
mysql> SET PASSWORD = PASSWORD("zthfbb");
Query OK, 0 rows affected, 1 warning (0.11 sec)
七. root 用户密码丢失的解决办法
1. 使用skip-grant-tables 选项启动MySQL服务
以 skip-grant-tables 选项启动时,MySQL 服务器将不加载权限判断,任何用户都能访问数据库。
(1)windows系统下
在 Windows 操作系统中,可以使用 mysqld 或 mysqld-nt 来启动 MySQL 服务进程。如果 MySQL 的目录已经添加到环境变量中,可以直接使用 mysqld、 mysqld-nt 命令启动MySQL服务,否则需要先在命令行切换到 MySOL 的bin目录。mysqld命令如下:
mysqld --skip-grant-tables
mysqld-nt命令如下:
mysqld-nt --skip-grant-tables
(2)Linux系统下
在 Linux 操作系统中,既可以使用 mysqld_safe 来启动 MySQL 服务,也可以使用 /etc/init.d/mysql 命令来启动 MySQL服务。
mysqld-safe 命令如下:
mysqld_safe --skip-grant-tables user=mysqld
/etc/init.d/mysql 命令如下:
/ect/init.d/mysqld start-mysqld --skip-grant-tables
启动 MySQL 服务后,就可以使用 root 用户登录了。
2.使用root用户登录, 重新设置密码
【注】以 windows 为例
(1)使用 net stop mysql 命令停止 mysql 服务进程。(需要管理员身份打开命令行窗口)
C: > net stop mysql
MySQL 服务正在停止.
MySQL 服务已成功停止。
(2)使用 mysqld - -skip-grant-tables 启动服务器
C:>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 ...
【注】命令运行之后,用户无法输入指令,此时如果在任务管理器中看到名为 mysqld 的进程,则表示可以使用 root 用户登录了。
(3) 另外打开一个命令行窗口,输入不加密码的登录命令。
C:>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密码
输入如下语句:
UPDATE myslq.user SET authentication_string= PASSWORD("rootpwd") WHERE User="root" AND Host="localhost";
3.加载权限表
密码修改完成后,必须使用 FLUSH PRIVILEGES 语句加载权限表。加载权限表后,新的密码才会生效,同时 MySQL 服务器开始权限验证,输入语句如下:
FLUSH PRIVILEGBS;
修改密码完成后,将输入 mysql --skip-grant-tables 命令的命令行窗口关闭,接下来就可以使用新设置的密码登录MySQL了。 【注】参考于清华大学出版社《MySQL数据库应用案例课堂》2016年1月第1版
最后
以上就是呆萌自行车为你收集整理的MySQL——安全性机制之账户管理一. 登录和退出 MySQL 服务器 二. 新建普通用户三. 删除普通用户四. root 用户修改自己的密码五. root 用户修改普通用户密码六. 普通用户修改密码七. root 用户密码丢失的解决办法的全部内容,希望文章能够帮你解决MySQL——安全性机制之账户管理一. 登录和退出 MySQL 服务器 二. 新建普通用户三. 删除普通用户四. root 用户修改自己的密码五. root 用户修改普通用户密码六. 普通用户修改密码七. root 用户密码丢失的解决办法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复