MYSQL用户权限管理学习笔记
MYSQL 用户管理
1.权限表
MYSQL是一个多用户的数据库,MYSQL的用户可以分为两大类:
(1) 超级管理员用户(root),拥有全部权限
(2) 普通用户,由root创建,普通用户只拥有root所分配的权限
1.1 权限表的位置
数据库:mysql
与权限相关的数据表:user,db,host,tables_priv,columns_priv,procs_priv等
1.2 user表
User表存储了:
(1)用户的信息:hots(用户所在的主机),user(用户名),password(密码)
(2)用户的权限信息:_priv
(3)安全性相关的信息:ssl_,x509,记录用户登录的验证操作等
(4)与资源分配相关的信息:max_,
max_questions表示用户在一个小时内最多可以进行的查询次数。
max_updates表示用户在一个小时内最多可以进行的更新次数,也包括增加数据、删除数据。
Max_connections:表示用户最多可以建立的连接数
1.2.1 user表的内容
(1)host列
Localhost表示本机的用户或者超级管理员
%表示任何主机上的root用户
说明:_priv权限是全局权限,不受数据库的范围限制
1.3 DB表
(1)与用户相关的字段:hots(用户所在的主机),user(用户名),
(2)与权限相关的字段:_priv,DB字段规定了_priv权限的有效范围。
1.4 host表
(1)与用户相关的字段:hots(用户所在的主机)
(2)与权限相关的字段:_priv,DB字段规定了_priv权限的有效范围。
说明:
(1) 记录主机上的用户对数据库拥有的权限,侧重点在主机,而不在用户,例如假设select_priv=Y,那个这个主机上的所有数据库用户都拥有select权限。
(2) Host表的优先级大于db表,如果db表规定这个用户没有权限,但是host表规定了这台主机的用户有权限,那么db的这个用户也是拥有权限的。
1.5 tables_priv表
设定了用户对某个表拥有的权限,该表记录了用户的信息,以及某个表的权限信息table_priv(select ,lnsert,alter等等),以及表上的某个列的权限信息column_priv。
1.6 column_priv表
记录某用户对某表的某个列所拥有的权限。
1.7procs_priv 表
规定了用户关于存储过程及存储函数的操作权限,主要字段:proc_priv
2. 创建数据库用户
2.1 创建普通用户
2.1.1 CREATE USER
CREATE USER ‘用户名称’ [@’主机名称’]
例:CREATE USER 'user1';
验证是否创建成功:
mysql> SELECT user FROM mysql.user;
+-------+
| user |
+-------+
| user1 |
| root |
| root |
| |
| pma |
| root |
+-------+
6 rows in set (0.00 sec) 说明新创建的用户已经进入user表内
说明:使用CREATE USER来创建的用户,均无任何权限,user表的权限字段的值均为N
(1)创建带有主机名的用户
CREATE USER ‘用户名称’ [@’主机名称’] [INDENTIFIED BY ‘用户密码’]
CREATE USER 'user2' @'localhost';
mysql> select user,host from mysql.user;
+-------+---------------------+
| user | host |
+-------+---------------------+
| user1 | % |
| root | 127.0.0.1 |
| root | ::1 |
| | localhost |
| pma | localhost |
| root | localhost |
| user2 | localhost |
+-------+---------------------+
7 rows in set (0.00 sec)
说明:host字段的%表示不受任何主机的限制
(2)创建带密码的用户
CREATE USER 'user3' @'localhost' [INDENTIFIED BY ‘用户密码’];
例子:
CREATE USER 'user3' @'localhost' IDENTIFIED BY '123333';
验证:
mysql> SELECT user,password,host FROM mysql.user;
+-------+-------------------------------------------------------------------------+-----------+
| user | password | host |
+-------+-------------------------------------------------------------------------+-----------+
| root | | localhost |
| root | | 127.0.0.1 |
| root | | ::1 |
| | | localhost |
| pma | | localhost |
| user1 | | % |
| user2 | | localhost |
| user3 | *0166E21E66009700F528CA21179AF9AD81120DA2 | localhost |
+-------+-------------------------------------------------------------------------+-----------+
8 rows in set (0.00 sec)
说明:密码是哈希码的形式显示的
2.1.2 使用GRANT来创建用户,以及授予权限
GRANT是用来给用户授权的,但是也可以用来创建用户,GRANT在给用户进行授权的时候,如果用户是不存在的,那么GRANT会自动创建这个用户,然后再给这个用户进行授权。
(1)添加权限
grant 权限 on 数据库.表 to '用户名'@'登录主机' [INDENTIFIED BY ‘用户密码’];
权限: select ,update,delete,insert(表数据)、create,alert,drop(表结构)、references(外键)、create temporary tables(创建临时表)、index(操作索引)、create view,show view(视图)、create routine,alert routine,execute(存储过程)、all,all privileges(所有权限)
数据库:数据库名或者*(所有数据库)
表:表名或者*(某数据库下所有表),*.*表示所有数据库的所有表
主机:主机名或者%(任何其他主机)
例:grant selec,insert,update,delete on *.* to 'jifei'@'%';
GRANT SELECT ON *.* TO 'user4' @'localhost' IDENTIFIED BY '123333';
mysql> SELECT user,password,host FROM mysql.user;
+-------+-------------------------------------------------------------------------------+-----------+
| user | password | host |
+-------+-------------------------------------------------------------------------------+-----------+
| root | | localhost |
| root | | 127.0.0.1 |
| root | | ::1 |
| | | localhost |
| pma | | localhost |
| user1 | | % |
| user2 | | localhost |
| user3 | *0166E21E66009700F528CA21179AF9AD81120DA2 | localhost |
| user4 | *0166E21E66009700F528CA21179AF9AD81120DA2 | localhost |
+-------+-------------------------------------------------------------------------------+-----------+
9 rows in set (0.00 sec)
(2) 为用户授予指定数据库、指定表、指定列的权限:
GRANT UPDATE(cid,cname) ON mysqlpart2.custom TO 'user3'@'localhost';
授权成功后,可以在以下表中查看到授权信息:
数据库: mysql » 表: tables_priv "Table privileges"
数据库: mysql » 表: columns_priv "Column privileges"
(3)用户权限表
位置:数据库: information_schema »表: USER_PRIVILEGES
表的说明:
GRANTEE:授权者
PRIVILEGE_TYPE:权限名称
用户表:数据库: mysql »表: user "Users and global privileges"
说明:user表中,”_priv”的值域USER_PRIVILEGES表的PRIVILEGE_TYPE的值是一一对应的。
(4)权限的层级关系
①权限的层级关系,就是指权限的适用范围。
②权限的最高层级是全局级,所谓全局级就是可以在任何数据库的任何数据表上进行操作。
③数据库级:只能在某个数据库上进行操作。
④表级:权限信息所在位置:数据库: mysql »表: tables_priv "Table privileges"
⑤列级:权限信息所在位置:数据库: mysql »表: columns_priv "Column privileges"
⑥子程序级:权限信息所在位置:数据库: mysql »表: procs_priv "Procedure privileges"
(5)撤销权限
REVOKE 权限 ON 数据库.表 FROM '用户名'@'登录主机;
说明:赋权与撤销权限的区别,就是REVOKE是将to改为from
例:revoke all on *.* from ‘jifei’ @’%’;
REVOKE UPDATE(cid,cname) ON mysqlpart2.custom FROM 'user3'@'localhost';
(6) 查看权限
SHOW GRANTS;//自己
SHOW GRANTS FOR 用户名称@主机名称;
例:
SHOW GRANTS FOR dba@localhost;//指定用户指定host
mysql> SHOW GRANTS FOR user3@localhost;
+---------------------------------------------------------------------------------------------------------------+
| Grants for user3@localhost |
+---------------------------------------------------------------------------------------------------------------+
| GRANT SELECT ON *.* TO 'user3'@'localhost' IDENTIFIED BY PASSWORD '*975B2CD4FF9AE554FE8AD33168FBFC326D2021DD' |
| GRANT UPDATE (cname, cid) ON `mysqlpart2`.`custom` TO 'user3'@'localhost' |
+---------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
说明:所有SHOW关键字后面的词都是复数,所有CREATE关键字后面的词都是单数
通过mysql.columns_priv表来查看权限:
SELECT * FROM mysql.columns_priv WHERE user='user3' AND host='localhost';
mysql> SELECT * FROM mysql.columns_priv WHERE user='user3' AND host='localhost'\G
*************************** 1. row ***************************
Host: localhost
Db: mysqlpart2
User: user3
Table_name: custom
Column_name: cid
Timestamp: 0000-00-00 00:00:00
Column_priv: Update
*************************** 2. row ***************************
Host: localhost
Db: mysqlpart2
User: user3
Table_name: custom
Column_name: cname
Timestamp: 0000-00-00 00:00:00
Column_priv: Update
2 rows in set (0.00 sec)
2.1.3 关于以直接向user表插入记录的方式来创建用户
可以使用INSERT的方式,直接向user表插入记录,以此来创建用户,但是因为user表的字段很多,而且全部字段均不允许为空,这就需要为每一个列赋值,所以不推荐使用这种方式来创建用户。
2.1.4 CREATE USER 与 GRANT 两种方式创建用户的区别
(1)CREATE USER 创建用户的优点:语法简单
(2)CREATE USER 创建用户的不足:用户无权限
(3)GRANT 创建用户的优势:创建的用户有权限
(4)GRANT 创建用户的不足:语法较CREATE USER 繁琐
3. 删除MYSQL的用户
delete from mysql.user where user='用户名称' and host='主机名称';
例:DELETE FROM mysql.user WHERE user='user3' AND host='localhost';
删除后使用:FLUSH PRIVILEGES 来刷新权限
说明:
使用DELETET删除用户后,必须使用FLUSH PRIVILEGES 来刷新权限,否则将无法继续创建用户名与已删用户的用户名相同的用户,即使在user表中看不到已删除的用户,如果不刷新权限,也是无法再新建的。
例:
删除用户user3:
mysql> DELETE FROM mysql.user WHERE user='user3' AND host='localhost';
Query OK, 1 row affected (0.00 sec)
查看用户表,user3已删除成功:
mysql> select user from mysql.user;
+-------+
| user |
+-------+
| user1 |
| root |
| root |
| |
| pma |
| root |
| user2 |
| user4 |
+-------+
8 rows in set (0.00 sec)
创建用户user3失败:
mysql> CREATE USER 'user3' @'localhost' IDENTIFIED BY 'pwd';
ERROR 1396 (HY000): Operation CREATE USER failed for 'user3'@'localhost'
刷新权限:
FLUSH PRIVILEGES;
再次创建用户,成功:
mysql> CREATE USER 'user3' @'localhost' IDENTIFIED BY 'pwd';
Query OK, 0 rows affected (0.00 sec)
4. 修改用户密码:
UPDATE mysql.user SET password=PASSWORD('新密码') WHERE user='用户名
[AND host=’主机名称’]';
UPDATE mysql.user SET password=PASSWORD('111111') WHERE user='root';
注意:
(1)如果不加WHERE 条件,则会把所有用户的密码都修改为’新密码’
(2)密码修改完成后,需要进行权限刷新操作才能生效,FLUSH PRIVILEGES;
例:
UPDATE mysql.user SET password=PASSWORD('111') WHERE user='user1';
(1)修改密码的权限
ROOT用户可以修改自己的密码,也可以修改其他用户的密码
其他用户只能修改自己的密码
(2)PASSWORD函数
用于把密码明文进行加密,所得到的密码为原密码的哈希值。
例:
mysql> SELECT PASSWORD('111');
+-------------------------------------------+
| PASSWORD('111') |
+-------------------------------------------+
| *832EB84CB764129D05D498ED9CA7E5CE9B8F83EB |
+-------------------------------------------+
1 row in set (0.07 sec)
(3)ROOT用户、普通用户修改自己的密码
SET PASSWORD=PASSWORD(‘新密码’);
(4)ROOT 用户为其他用户修改密码:
SET PASSWORD FOR ‘用户名称’ @’主机名称’ = password(‘新密码’);
例,以下两种修改密码的方式结果相同:
SET PASSWORD FOR 'user1' @'%'=PASSWORD('111');
UPDATE mysql.user SET password=PASSWORD('111') WHERE user='user1';
扩展:http://www.cnblogs.com/hencehong/archive/2013/03/19/mysql_user.html
MYSQL用户权限管理学习笔记的更多相关文章
- Mysql 用户权限管理
1. MySQL 权限介绍 mysql中存在4个控制权限的表,分别为user表,db表,tables_priv表,columns_priv表,我当前的版本mysql 5.7.22 . mysql权限表 ...
- Mysql 用户权限管理--从 xxx command denied to user xxx
今天遇到一个mysql 权限的问题,即标题所述 xxx command denied to user xxx,一般mysql 这种报错,基本都属于当前用户没有进行该操作的权限,需要 root 用户授 ...
- MYSQL用户权限管理GRANT使用
http://yanue.net/post-97.html GRANT语句的语法: mysql> grant 权限1,权限2,-权限n on 数据库名称.表名称 to 用户名@用户地址 iden ...
- mysql 用户权限管理详细
用户管理 mysql>use mysql; 查看 mysql> select host,user,password from user ; 创建 mysql> create user ...
- mysql用户权限管理
参考文章:http://www.cnblogs.com/jackruicao/p/6068821.html?utm_source=itdadao&utm_medium=referral (1) ...
- yii2 rbac权限管理学习笔记
下面介绍一个 yii2 的 Rbac 权限管理设置,闲话少说,直接上代码, 1.首先我们要在组件里面配置一下 Rbac ,如下所示(common/config/main-local.php或者main ...
- MYSQL用户权限管理(Grant,Revoke)
MySQL可以为不同的用户分配严格的.复杂的权限.这些操作大多都可以用SQL指令Grant(分配权限)和Revoke(回收权限)来实现. Grant可以把指定的权限分配给特定的用户,如果这个用户不存在 ...
- mysql用户权限管理的问题
为了保证数据库安全,建立了若干个只能select的用户,但在权限授权的时候出现了不能连接的问题, 一个个尝试了一下,需要将 : 管理 -> SUPER项勾选才行(使用phpmyadmin),上 ...
- ucore lab5 用户进程管理 学习笔记
近几日睡眠质量不佳,脑袋一困就没法干活,今天总算时补完了.LAB5难度比LAB4要高,想要理解所有细节时比较困难.但毕竟咱不是要真去写一个OS,所以一些个实现细节就当成黑箱略过了. 这节加上了用户进程 ...
随机推荐
- Swift中共有74个内建函数
Swift中共有74个内建函数,但是在Swift官方文档(“The Swift Programming Language”)中只记录了7中.剩下的67个都没有记录. 本文将列举Swift所有的内建 ...
- 百度ios 开发面试题
百度移动云可穿戴部门的面试经历,面试官都非常热情友好,一上来到弄的我挺不好意思的.下面记录一下自己的面试过程,因为我真的没啥面试经验,需要总结下. 1面 Objective C runtime lib ...
- DGV属性
1.控件的SelectedCells.Count属性可以判断用户是否已经选择数据,如果大于0说明有选择的数据. 2.SelectedCells[N].Value的属性可以获取某一行数据中某列的数据,其 ...
- Java反射学习(java reflect)(三)
五.方法指针 据说JAVA方法指针的出现,是作为反射包的附产品 : 使用原理:Invoke被允许调用包装在当前Method对象的方法: 第一个参数为隐式参数,可用null,第二个参数为显示参数. Ex ...
- Chess---->简单命令框象棋(人VS人)
简单粗暴,直接先上代码: ChessBoard.h: 1 #ifndef CHESBOARD_H 2 #include<iostream> 3 #include<string& ...
- poj 1273.PIG (最大流)
网络流 关键是建图,思路在代码里 /* 最大流SAP 邻接表 思路:基本源于FF方法,给每个顶点设定层次标号,和允许弧. 优化: 1.当前弧优化(重要). 1.每找到以条增广路回退到断点(常数优化). ...
- Mac开机黑屏解决办法
开机黑屏问题 *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !import ...
- html框架集 js刷新页面方法大全
一.先来看一个简单的例子: 下面以三个页面分别命名为frame.html.top.html.bottom.html为例来具体说明如何做. frame.html 由上(top.html)下(bottom ...
- MySQL zip版安装配置
文章出处:http://www.cnblogs.com/winstic/,请保留此连接 这段时间在学习Python 数据库操作知识,简单整理MySQL zip文件安装方法 下载 在MySQL官网htt ...
- vim技巧:折叠快捷键
vim技巧:折叠快捷键 以前用的挺熟的,一段时间不用了,快捷键又忘了,不得不重新再看手册,今天专门整理一下,以后查找起来也比较方便. zc 折叠,只折叠最外层的折叠zC 对所在范围内所有嵌套的折叠点进 ...