账户管理(一)

账户管理(一)

1.MySQL账户管理

  • 在我们之前登录MySQL的时候我们都是直接使用的root用户,root用户属于数据库系统中的超级管理员,有权限对mysql进行任何想要做的操作。

  • 如果在生产环境下操作数据库时也是全部直接使用root账户连接,这就和悬崖边跳舞差不多。所以 创建特定的账户,授予这个账户特定的操作权限,然后连接进行操作 比如常规的crud 才是正道。

  • MySQL账户体系:根据账户所具有的权限的不同,MySQL的账户可以分为以下几种

  • 服务实例级账号:,启动了一个mysqld,即为一个数据库实例;如果某用户如root,拥有服务实例级分配的权限,那么该账号就可以删除所有的数据库、连同这些库中的表
  • 数据库级别账号:对特定数据库执行增删改查的所有操作
  • 数据表级别账号:对特定表执行增删改查等所有操作
  • 字段级别的权限:对某些表的特定字段进行操作
  • 存储程序级别的账号:对存储程序进行增删改查的操作

注意:进行账户操作时,需要使用root账户登录,这个账户拥有最高的实例级权限。账户的操作主要包括创建账户、删除账户、修改密码、授权权限等。

需要使用实例级账户登录后操作,以root为例

主要操作包括:

  • 查看所有用户
  • 修改密码
  • 删除用户

2. 查看所有用户

  • 所有用户及权限信息存储在mysql数据库的user表中
  • 查看user表的结构
1
2
use mysql;
desc user;
  • 主要字段说明:
  • Host表示允许访问的主机
  • User表示用户名
  • password表示密码,为加密后的值

查看所有用户

1
select host,user,password from user;

结果 taobao.com jd.com itheima.com zhangsan 123456

1
2
3
4
5
6
7
mysql> select host,user,password from user;
+-----------+------+-------------------------------------------+
| host      | user | password                                  |
+-----------+------+-------------------------------------------+
| localhost | root | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+-----------+------+-------------------------------------------+
1 row in set (0.00 sec)

3. 创建账户、授权

  • 需要使用实例级账户登录后操作,以root为例
  • 常用权限主要包括:create、alter、drop、insert、update、delete、select
  • 如果分配所有权限,可以使用all privileges

步骤

1
2
3
4
5
步骤一:创建用户
create user '用户名'@'主机' identified by '密码';

步骤二:授权
grant 权限 on 数据库.表名 to '用户名'@'主机名';

示例1:

创建一个laowang的账号,密码为123456,只能通过本地(localhost)访问, 并且只能对day26数据库中的所有表进行操作

  • step1:使用root登录
1
2
mysql -uroot -p
回车后写密码,然后回车
  • step2:创建账户并授予所有权限
1
2
3
create user 'laowang'@'localhost' identified by '123456';  # 创建用户

grant select on day26.user to 'laowang'@'localhost';      # 授予select的权限

说明

  • 可以操作day26数据库的user表,方式为:day26.user
  • 访问主机通常使用 百分号% 表示此账户可以使用任何ip的主机登录访问此数据库
  • 访问主机可以设置成 localhost或具体的ip,表示只允许本机或特定主机访问

  • 查看用户有哪些权限

1
show grants for 'laowang'@'localhost';

  • step3:退出root的登录
1
quit
  • step4:使用laowang账户登录
1
mysql -ulaowang -p654321
  • 登录后效果如下图
  • 查看day26数据库中的表
  • 查看day26.user表中的数据

  • 前面的这些查询操作我们都能愉快的验证通过,那么接下来我们来修改一下数据试试

1
update user set money=3000;

这里提示说:更新命令被拒绝啦!laowang这个用户没有对user表执行update的权限.还记得我们前面授予的权限吗?

1
2
3
4
mysql> grant select on day26.user to 'laowang'@'localhost';
Query OK, 0 rows affected (0.00 sec)

我们仅仅只是授予了laowang能够查询day26库中的user表

示例2

创建一个laoli的账号,密码为123456,可以任意电脑进行链接访问, 并且对day26数据库中的所有表拥有所有权限

注意:需要使用root账户才能进行创建用户和授权

1
2
3
4
5
mysql> create user 'laoli'@'%' identified by '123456';
Query OK, 0 rows affected (0.01 sec)

mysql> grant all privileges on day26.* to 'laoli'@'%';
Query OK, 0 rows affected (0.00 sec)
  • 使用'laoli'@'localhost'进行登录

  • 查看所有的表

​ 哇塞,当我们授权day26.*的时候,我们可以查看到day26这个数据库的中的所有的表喔!

  • 下面我们来查看一下表中的数据

  • 我们再来更新一下数据试试
  • 看这个时候,就没有再出现权限被拒绝的情况啦! 因为laoli的权限为all privileges


账户管理(二)

1. 删除权限

1
2
3
4
5
6
revoke 权限名称 on 数据库.表名 from 账户@主机 

:
revoke select on day26.user from laoli@'%';
刷新权限列表
flush privileges;

2. 修改密码

使用root登录,修改mysql数据库的user表

  • 使用password()函数进行密码加密
1
2
3
4
set password for '用户名'@'地址'=password('新密码')

例:
set password for 'laowang'@'localhost'=password('123456');
  • 注意修改完成后需要刷新权限
1
刷新权限:flush privileges
1
2
3
4
5
mysql> set password for 'laowang'@'localhost'=password('123456');
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.02 sec)

!!! 忘记mysql默认密码

假设我们忘记了密码或者输错了密码, 输入 mysql -uroot -p ,回车输入密码进入数据库就会出现这样到错误;

1
Access denied for user 'root'@'localhost' (using password: YES)

解决方案:密码置空+修改密码

第一步,停止MySQL服务

1
2
3
4
5
以管理员到身份打开cmd命令行窗口!

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

第二步,编辑MySQL配置文件:

编辑mysql的配置文件

1
C:\Program Files\MySQL\MySQL Server 5.5\my.ini

在[mysqld]段下加入一行“skip-grant-tables”。让mysql跳过正常验证(非常危险,尽快操作)

1
2
3
4
[mysqld]
skip-grant-tables
# The TCP/IP Port the MySQL Server will listen on
port=3306

保存文件,并退出编辑模式

第三步,启动MySQL服务:

1
2
3
C:\WINDOWS\system32>net start mysql
MySQL 服务正在启动 .
MySQL 服务已经启动成功。

第四步,控制台直接输入mysql 即可登录到 mysql控制台

第五步,修改密码,将laowang的密码设置为123123

1
2
3
use mysql;

update user set password=password('123123') where user='laowang';

第六步,退出控制台,并修改mysql启动方式为普通模式

再次编辑 mysql 配置文件,注释或删除此行 skip-grant-tables 并保存退出

1
C:\Program Files\MySQL\MySQL Server 5.5\my.ini

第七步:重启 mysql服务,此时密码就为空了

1
2
3
4
5
6
7
8
C:\WINDOWS\system32>net stop mysql
MySQL 服务正在停止.
MySQL 服务已成功停止。


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

第八步: 使用laowang用户,密码为123123登录

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
C:\WINDOWS\system32>mysql -ulaowang -p123123
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.5.27 MySQL Community Server (GPL)

Copyright (c) 2000, 2011, 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. 删除账户

  • 语法1:使用root登录
1
2
3
drop user '用户名'@'主机';
例:
drop user 'laowang'@'%';
  • 语法2:使用root登录,删除mysql数据库的user表中数据
1
2
3
4
5
6
delete from user where user='用户名';
例:
delete from user where user='laowang';

-- 操作结束之后需要刷新权限
flush privileges
  • 推荐使用语法1删除用户, 如果使用语法1删除失败,采用语法2方式

忘记 root 账户密码怎么办 !!

  • 一般也轮不到我们来管理 root 账户,所以别瞎卖白粉的心了