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
(1) 这是创建一个用户是 ‘用户名’@‘主机名’
(2) identified by 后面可以指定密码


1.4 mysql用户删除

基本语法
drop user ‘用户名’@‘主机名’;

1.5 修改密码

修改自己的密码
set password = password('密码');
1


修改其它用户的密码
set password for '用户名'@'主机名'= password('密码');
1


root用户密码丢失的解决方法

掌握MySQL权限管理的方法
1.6 给mysql用户赋权限
当我们新创建一个用户时,该用户除了可以登录,没有其它的权限.
在mysql中,权限一览表:权限表


基本语法
grant 权限列表 ON 数据库.数据对象 TO '用户名'@'主机名'  [identified by '密码'];
1
给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 '用户名'@'主机名 ';
1
说明:
revoke 的权限列表和 数据库.表名的用法和前面 grant 是一样。

1.8 查询mysql用户的权限

基本语法
show grants for '用户名'@'主机名';
1


1.9 让权限生效
如果我们给某个用户赋权限后,发现没有生效,则可以使用下面的指令,让权限立即管用.


1.10 用户管理的注意事项
(1) 在创建用户的时候,如果不指定Host, 则为% , %表示表示所有IP都有连接权限


说明,这样创建用户很危险,该用户可以远程登录,所有不要这样使用.

(2) 还可以这样创建用户

create user  'xxx'@'192.168.0.%'  表示 xxx用户在 192.168.0.*的ip可以登录mysql
1
(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个级别:全局性管理权限,数据库级别权限,数据库对象级别权限和列级别权限。用户可根据需要为不同用户分配不同的权限。
————————————————
版权声明:本文为CSDN博主「不想想了」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45627194/article/details/110950619

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值