文章目录
- 认识权限表并掌握其用法
- 掌握MySQL账号管理的方法
- 掌握MySQL权限管理的方法
MySQL属于多用户数据库,其访问控制系统功能强大,可以赋予不同用户指定的权限。MySQL的用户分为root用户和普通用户两类root用户是超级管理员,拥有创建用户、删除用户、修改用户密码等所有权限;普通用户只拥有被root用户授予的各种权限。本章将讲解权限与安全的相关知识,包括权限表、账号管理和权限管理。
那么Mysql的权限是如何实现的呢?这就要说到mysql的两阶段验证第一阶段:服务器首先会检查你是否允许连接。因为创建用户的时候会加上主机限制,可以限制成本地、某个IP、某个IP段、以及任何地方等,只允许你从配置的指定地方登陆。第二阶段:如果你能连接,Mysql会检查你发出的每个请求,看你是否有足够的权限实施它。比如你要更新某个表、或者查询某个表,Mysql会查看你对哪个表或者某个列是否有权限。再比如,你要运行某个存储过程,Mysql会检查你对存储过程是否有执行权限等。
认识权限表并掌握其用法
mysql数据库中的3个权限表:user 、db、 host
权限表的存取过程是:1)先从user表中的host、 user、 password这3个字段中判断连接的IP、用户名、密码是否存在表中,存在则通过身份验证;2)通过权限验证,进行权限分配时,按照user,db,tables_priv,co;umns_priv的顺序进行验证。即先检查全局权限表user,如果user中对应的权限为Y,则此用户对所有数据库的权限都为Y,将不再检查db, tables_priv,columns_priv;如果为N,则到db表中检查此用户对应的具体数据库,并得到db中为Y的权限;如果db中为N,则检查tables_priv中此数据库对应的具体表,取得表中的权限Y,以此类推。
[实例]执行SQL语句,查看user表中的用户信息。
打开命令窗口,登录MYSL并选择数据库mysq执行soL语句查看usr表中的用户信息。SQL语句及其执行结果如下:
mysql> USE mysql;
Database changed
mysql> SELECT user,host FROM userIG
*************************** 1 row ***************************
user: mysql.sys
host: localhost
*************************** 2 row ***************************
user: root
host: localhost
2 rows in set (0.00 sec)
由查询结果可知,默认情况下user表中只有两个用户,其中一个是root。
掌握MySQL账号管理的方法
第 1 章 mysql用户的管理
1.1 mysql用户管理的必要性
1.2 mysql用户的基本介绍
mysql用户都保存在mysql数据库的user表中,具体如下:
说明
(1) Host表示该用户可以登录的ip, 如果是localhost表示只能本机登录,不能远程登录,注意在实际开发中,我们只能让用户本机登录mysql
(2) User字段;用户名 ,说明在mysql中,一个完整的用户名是有User和Host组成比如 ‘root’@‘localhost’;
(3) Password:用户密码, 使用password函数加密的.
1.3 mysql用户创建
基本语法/ 指令
create user '用户名'@'主机名' identified by '密码';
(1) 这是创建一个用户是 ‘用户名’@‘主机名’
(2) identified by 后面可以指定密码
1.4 mysql用户删除
- 基本语法
drop user ‘用户名’@‘主机名’;
1.5 修改密码
- 修改自己的密码
set password = password('密码');
- 修改其它用户的密码
set password for '用户名'@'主机名'= password('密码');
root用户密码丢失的解决方法
掌握MySQL权限管理的方法
1.6 给mysql用户赋权限
当我们新创建一个用户时,该用户除了可以登录,没有其它的权限.
在mysql中,权限一览表:权限表
- 基本语法
grant 权限列表 ON 数据库.数据对象 TO '用户名'@'主机名' [identified by '密码'];
给lying 用户 分配 class9的所有表查询权限。
grant select ON class9.* TO ‘lying’@’%’
ps: 数据对象包括: 表, 视图, 函数, 触发器,存储过程
(1) 权限列表可以是 select , update , insert ,delete …, 如果你希望将所有的权限都给某个用户,则可以写 all, 比如:
也可以一次给多个权限
grant select , delete , update to ‘hsp’@‘localhost’ ;
(2) 数据库.表:
- 可以将某个库的某个表给某个用户使用,比如 itbull.emp
- 如果希望将某个库的所有的表都给用户,则可以 数据库., 比如itbull.
- 如果你希望将所有库的所有表都给用户,可以写成 .
(3) 对identified by ‘密码’ 的说明
tip:1.当我们赋值权限的时候,如果是给当前用户[非root]创建权限,则无法进行,需要切换到root权限下统一给非root用户创建。
2.当我们创建权限时,@后面所跟的host字段值必须要与当初创建权限时候一致,不能任意修改。
mysql> grant select ON class9.* TO 'lying'@'localhost';
Query OK, 0 rows affected (0.00 sec)
create user 'lying'@'localhost' identified by '123456';
Query OK, 0 rows affected (0.01 sec)
detele from test where id=1;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'detele from test where id=1' at line 1
mysql> delete from test where id=1;
ERROR 1142 (42000): DELETE command denied to user 'lying'@'localhost' for table 'test'
mysql> show grants for 'lying'@'localhost';
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 20
Current database: class9
+---------------------------------------------------+
| Grants for lying@localhost |
+---------------------------------------------------+
| GRANT USAGE ON *.* TO 'lying'@'localhost' |
| GRANT SELECT ON `class9`.* TO 'lying'@'localhost' |
+---------------------------------------------------+
mysql> revoke select ON class9.* from 'lying'@'localhost';
Query OK, 0 rows affected (0.00 sec)
mysql> show grants for 'lying'@'localhost';
+-------------------------------------------+
| Grants for lying@localhost |
+-------------------------------------------+
| GRANT USAGE ON *.* TO 'lying'@'localhost' |
+-------------------------------------------+
1 row in set (0.00 sec)
mysql> set password for 'lying'@'localhost'=password('111111');
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> drop user 'lying'@'localhost';
Query OK, 0 rows affected (0.01 sec)
1.7 回收mysql用户的权限
- 基本语法
revoke 权限列表 ON 数据库.表名 from '用户名'@'主机名 ';
说明:
revoke 的权限列表和 数据库.表名的用法和前面 grant 是一样。
1.8 查询mysql用户的权限
- 基本语法
show grants for '用户名'@'主机名';
1.9 让权限生效
如果我们给某个用户赋权限后,发现没有生效,则可以使用下面的指令,让权限立即管用.
1.10 用户管理的注意事项
(1) 在创建用户的时候,如果不指定Host, 则为% , %表示表示所有IP都有连接权限
说明,这样创建用户很危险,该用户可以远程登录,所有不要这样使用.
(2) 还可以这样创建用户
create user 'xxx'@'192.168.0.%' 表示 xxx用户在 192.168.0.*的ip可以登录mysql
(3) 在删除用户的时候,如果 host 不是 %, 需要明确指定 ‘用户’@‘host’, 如果host是 %, 则删除用户不需要指定host
MYSQL的权限如何分布,就是针对表可以设置什么权限,针对列可以设置什么权限等等,这个可以从官方文档中的一个表来说明:
权限分布 可能的设置的权限
表权限 ‘Select’, ‘Insert’, ‘Update’, ‘Delete’, ‘Create’, ‘Drop’, ‘Grant’, ‘References’, ‘Index’, ‘Alter’
列权限 ‘Select’, ‘Insert’, ‘Update’, ‘References’
过程权限 ‘Execute’, ‘Alter Routine’, ‘Grant’
1.Create user ‘abb’@’localhost’ identified by ‘123’;
2.create database testdb;
3.create table news(
id int primary key auto_increment,
title varchar(20) not null,
describe text not null,
author varchar(20) not null,
create_time datetime not null,
index(title,describe) );
4. grant select,update on testdb.news to ‘用户’@’localhost’;
5. set password = password(‘abc’);
6. mysql -uroot -p
7.drop user abb@localhost;
总结
➢服务器在存取控制过程中使用MySQL数据库中的权限表进行权限判断。要了解MySOL 5.7中4个控制权限的表:user表,db表,tbless priv表和coum priv表,并简单认识user表中常用字段及其意义。
➢在MySQL中,常用创建账号的方式有两种:一种是使用GRANT语句:另一种使用CREATE USER语句。般推荐使用GRANT语句,因为操作简单,出错几率少。
➢在 MySQL中,修改root用户密码的方式有多种: 一种是修MySQL数据库的user表,另-种是使用mysqladmin命令修改密码,还有一种是使用SET语句修改root用户密码。
➢使用root用户修改普通用户密码的方法也有多种:一种是使用 SET语句,另一种是使用UPDATE语句,还有一一种是使用GrANt语句。另外需要注意SET语句也可用于普通用户设置自身密码。
➢MySQL中的权限,根据其操作对象的不同,可以分为4个级别:全局性管理权限,数据库级别权限,数据库对象级别权限和列级别权限。用户可根据需要为不同用户分配不同的权限。