2.mysql授权认证
权限系统介绍
● 什么是权限系统
权限系统是授予来自某个主机的某个用户可以查询、插入、修改、删除等数据库操作的权限
不能明确的指定拒接某个用户的连接
权限控制(授权与收回)的执行语句包括 create user,grant,revoke
授权后的权限都会存放在MySQL的内部数据库中(数据库名叫做mysql),并在数据库启动以后把权限信息复制到内存中
MySQL用户的认证信息不管包括用户名,还要包含连接发起的主机(如下不能被认定为是同一个用户)
SHOW GRANTS FOR ‘joe’@‘office.example.com’;
SHOW GRANTS FOR 'joe'@'home.example.com';
● mysql权限级别
○ 全局性的管理权限,作用域整个MySQL实例级别
○ 数据库级别的权限,作用域指定某个指定的数据库上捉着所有的数据库上
○ 数据库对象级别的权限,作用于指定的数据库对象上(表、视图等)或者所有的数据库对象上
● 权限存储在MySQL库的几张表中
user db table_priv columns_priv procs_priv
● 查看mysql实例默认root用户的权限(来自localhost)
show grants for root@localhost;
+---------------------------------------------------------------------+
| Grants for root@localhost |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON . TO 'root'@'localhost' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+
select * from user where user=‘root’ and host=‘localhost’; ##都是’Y’
select * from db where user=‘root’ and host=‘localhost’; ##无记录
select * from tables_priv where host=‘localhost’ and user=‘root’; ##无记录
select * from columns_priv where user=‘root’ and host=‘localhost’; ##无记录
select * from procs_priv where user=‘root’ and host=‘localhost’; ##无记录
● mysql权限详细介绍
权限名称 说明
ALL\ALL Privileges 权限代表全局或者全数据库对象级别的所有权限
alter 代表允许修改表结构的权限,但必须要求有create和insert权限配合
rename 修改名称权限,则要求有alter 和drop原表,create 和insert新表的权限
alter routine 代表允许修改或者删除存储过程、函数的权限
create 代表允许修改或者删除存储过程、函数的权限
alter routine 代表允许创建存储过程、函数的权限
Create temporary tables 代表允许创建临时表的权限
create user 允许创建、修改、删除、重命名user的权限
create view 代表允许创建视图的权限
delete 代表允许删除行数据的权限
drop 代表允许删除数据库、表、视图的权限,包括truncate table权限
event 权限代表允许查询,创建,修改,删除mysql事件
execute 代表允许执行存储过程和函数的权限
file 代表允许在MySQL可以访问的目录尽心读写磁盘文件的操作,可以使用的命令包括load data infile ,select ....into outfile ,load file()函数
grant option 代表允许此用户授权或者回收其他用户你授予的权限
index 权限代表是否允许创建和删除索引
insert 代表与允许在表例插入数据,同时在执行analyze table ,optimize table,repair table语句的时候也需要insert权限
lock 代表对拥有select权限的表进行锁定,以防止其他连接对此表的读写
process 代表允许查看MySQL中的进程信息,比如执行show processlist,mysqladmin processlist,show engine等命令
reference 5.7.6以后引入,代表是否允许创建外键
reload 代表允许执行flush命令,指明重新加载权限表到系统内存中,refresh命令代表关闭和重启开启日志文件并刷新所有的表
replication client 代表允许执行show master status,show slave status,show binary logs命令
Replication slave 限代表允许slave主机通过此用户连接master以便建立主从复制关系
Select 限代表允许从表中查看数据,某些不查询表数据的select执行则不需要此权限,如Select 1+1,Select PI()+2;而且select权限在执行update/delete语句中含有where条件的情况下也是需要的
Trigger 权限代表允许创建,删除,执行,显示触发器的权限
Usage 权限是创建一个用户之后的默认权限,其本身代表连接登录权限
Shutdown 权限代表允许关闭数据库实例,执行语句包括mysqladmin shutdown
Super 权限代表允许执行一系列数据库管理命令,包括kill强制关闭某个连接命令,change master to创建复制关系命令,以及create/alter/drop server等命令
● 权限系统表
表名 用途
user 存放用户账户信息以及全局级别(所有数据库)权限,决定了来自哪些主机的哪些用户可以访问数据库实例,如果有全局权限则意味着对所有数据库都有此权限
db 存放数据库级别的权限,决定了来自哪些主机的哪些用户可以访问此数据库
tables_priv 存放表级别的权限下,决定来自哪些主机的哪些用户可以访问数据库的这个表
columns_priv 存放列级别的权限,决定了来自哪些主机的哪些用户可以访问数据表的这个字段
procs_priv 存放存储过程和函数级别的权限
● 系统权限表
• User权限表结构中的特殊字段
• Plugin,password,authentication_string三个字段存放用户认证信息
• Password_expired设置成’Y’则表明允许DBA将此用户的密码设置成过期而
且过期后要求用户的使用者重置密码(alter user/set password重置密码)
• Password_last_changed作为一个时间戳字段代表密码上次修改时间,执
行create user/alter user/set password/grant等命令创建用户或修改用户密
码时此数值自动更新
• Password_lifetime代表从password_last_changed时间开始此密码过期的天
数
• Account_locked代表此用户被锁住,无法使用
权限认证中的大小写敏感问题
• 字段user,password,authencation_string,db,table_name大小写敏感
• 字段host,column_name,routine_name大小写不敏感
User用户大小写敏感
• mysql> create user abc@localhost;
• ERROR 1396 (HY000): Operation CREATE USER failed for 'abc'@'localhost'
• mysql> create user Abc@localhost;
• Query OK, 0 rows affected (0.01 sec)
● mysql的授权用户由两部分组成:用户名和登录名
• 表达用户的语法为‘user_name’@‘host_name’
• 单引号不是必须,但如果其中包含特殊字符则是必须的
• ‘’@‘localhost’代表匿名登录的用户
• Host_name可以使主机名或者ipv4/ipv6的地址。Localhost代表本机,127.0.0.1代表ipv4的本机地址,::1代表ipv6的本机地址
• Host_name字段允许使用%和_两个匹配字符,比如’%’代表所有主机,’%.mysql.com’代表来自mysql.com这个域名下的所有主机,‘192.168.1.%’代表所有来自192.168.1网段的主机
• 执行Grant,revoke,set password,rename user命令修改权限之后,MySQL会自动将修改后的权限信息同步加载到系统内存中
• 如果执行insert/update/delete操作上述的系统权限表之后,则必须再执行刷新权限命令才能同步到系统内存中,刷新权限命令包括:flush privileges/mysqladmin flush-privileges/mysqladmin reload
• 如果是修改tables和columns级别的权限,则客户端的下次操作新权限就会生效
• 如果是修改database级别的权限,则新权限在客户端执行use database命令后生效
• 如果是修改global级别的权限,则需要重新创建连接新权限才能生效
• --skip-grant-tables可以跳过所有系统权限表而允许所有用户登录,只在特殊情况下暂时使用
用户连接
mysql --user=finley --password db_name
mysql -u finley -p db_name
mysql --user=finley --password=password db_name
mysql -u finley -ppassword db_name
创建mysql用户
• 有两种方式创建MySQL授权用户
• 执行create user/grant命令(推荐方式)
• 通过insert语句直接操作MySQL系统权限表
CREATE USER 'finley'@'localhost' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON . TO 'finley'@'localhost' WITH GRANT OPTION;
CREATE USER 'finley'@'%' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON . TO 'finley'@'%‘ WITH GRANT OPTION;
CREATE USER 'admin'@'localhost' IDENTIFIED BY 'admin_pass';
GRANT RELOAD,PROCESS ON . TO 'admin'@'localhost';
grant select(id) on test.temp to cdq@localhost;
• mysql> SHOW GRANTS FOR 'admin'@'localhost';
• +-----------------------------------------------------+
• | Grants for admin@localhost |
• +-----------------------------------------------------+
• | GRANT RELOAD, PROCESS ON . TO 'admin'@'localhost' |
• +-----------------------------------------------------+
• mysql> SHOW CREATE USER 'admin'@'localhost'\G
• *************************** 1. row ***************************
• CREATE USER for admin@localhost: CREATE USER 'admin'@'localhost' • IDENTIFIED WITH 'mysql_native_password' • AS '*67ACDEBDAB923990001F0FFB017EB8ED41861105'
• REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK
• mysql> CREATE USER 'custom'@'localhost' IDENTIFIED BY 'obscure';
• mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
• -> ON bankaccount.*
• -> TO 'custom'@'localhost';
• mysql> CREATE USER 'custom'@'host47.example.com' IDENTIFIED BY 'obscure';
• mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
• -> ON expenses.*
• -> TO 'custom'@'host47.example.com';
• mysql> CREATE USER 'custom'@'%.example.com' IDENTIFIED BY 'obscure';
• mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
• -> ON customer.*
• -> TO 'custom'@'%.example.com';
回收用户权限
revoke
priv_type [(column_list)]
[, priv_type [(column_list)]] ...
on
[object_type] priv_level
from
user [,user] ...
revoke all [privileges], grant option from user [,user] ...
revoke proxy on user from user [,user] ...
删除mysql用户
drop user 'user_name'@'host';
设置mysql用户资源限制
• 通过设置全局变量max_user_connections可以限制所有用户在同一时 间连接MySQL实例的数量,但此参数无法对每个用户区别对待,所以MySQL提供了对每个用户的资源限制管理
• MAX_QUERIES_PER_HOUR:一个用户在一个小时内可以执行查询的次 数(基本包含所有语句)
• MAX_UPDATES_PER_HOUR:一个用户在一个小时内可以执行修改的次 数(仅包含修改数据库或表的语句)
• MAX_CONNECTIONS_PER_HOUR:一个用户在一个小时内可以连接MySQL的时间
• MAX_USER_CONNECTIONS:一个用户可以在同一时间连接MySQL实例 的数量
• 从5.0.3版本开始,对用户‘user’@‘%.example.com’的资源限制是指所有 通过example.com域名主机连接user用户的连接,而不是分别指从host1.example.com和host2.example.com主机过来的连接
• 通过执行create user/alter user设置/修改用户的资源限制
• mysql> CREATE USER 'francis'@'localhost' IDENTIFIED BY 'frank'
-> WITH MAX_QUERIES_PER_HOUR 20
-> MAX_UPDATES_PER_HOUR 10
-> MAX_CONNECTIONS_PER_HOUR 5
-> MAX_USER_CONNECTIONS 2;
• mysql> ALTER USER 'francis'@'localhost' WITH MAX_QUERIES_PER_HOUR 100;
• 取消某项资源限制既是把原先的值修改成0
• mysql> ALTER USER 'francis'@'localhost' WITH MAX_CONNECTIONS_PER_HOUR 0;
• 当针对某个用户的max_user_connections非0时,则忽略全局系统参数max_user_connections,反之则全局系统参数生效
设置用户的密码
• 执行create user创建用户和密码
• mysql> CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'mypass';
• 修改用户密码的方式包括:
• mysql> ALTER USER 'jeffrey'@'localhost' IDENTIFIED BY 'mypass';
• mysql> SET PASSWORD FOR 'jeffrey'@'localhost' = PASSWORD('mypass');
• mysql> GRANT USAGE ON . TO 'jeffrey'@'localhost' IDENTIFIED BY 'mypass';
• shell> mysqladmin -u user_name -h host_name password "new_password" • 修改本身用户密码的方式包括:
• mysql> ALTER USER USER() IDENTIFIED BY 'mypass';
• mysql> SET PASSWORD = PASSWORD('mypass');
设置用户密码过期策略
• 设置系统参数default_password_lifetime作用于所有的用户账户
• default_password_lifetime=180 设置180天过期
• default_password_lifetime=0 设置密码不过期
• 如果为每个用户设置了密码过期策略,则会覆盖上述系统参数
• ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY;
• ALTER USER ‘jeffrey’@‘localhost’ PASSWORD EXPIRE NEVER; 密码不过期
• ALTER USER ‘jeffrey’@‘localhost’ PASSWORD EXPIRE DEFAULT; 默认过期策略
• 手动强制某个用户密码过期
• ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE;
mysql> SELECT 1;
ERROR 1820 (HY000): You must SET PASSWORD before executing this statement
mysql> ALTER USER USER() IDENTIFIED BY 'new_password';
Query OK, 0 rows affected (0.01 sec)
mysql> SELECT 1;
MySQL用户lock
• 通过执行create user/alter user命令中带account lock/unlock子句设置用户的lock状态
• Create user语句默认的用户是unlock状态
• mysql> create user abc2@localhost identified by 'mysql' account lock;
• Query OK, 0 rows affected (0.01 sec)
• Alter user语句默认不会修改用户的lock/unlock状态
• mysql> alter user 'mysql.sys'@localhost account lock;
• Query OK, 0 rows affected (0.00 sec)
• mysql> alter user 'mysql.sys'@localhost account unlock;
• Query OK, 0 rows affected (0.00 sec)
• 当客户端使用lock状态的用户登录MySQL时,会收到如此报错
Access denied for user 'user_name'@'host_name'.
Account is locked.
密码生成器
http://suijimimashengcheng.51240.com/
● 权限系统有什么用?
● 如何使用权限系统
2.mysql授权认证的更多相关文章
- MySQL授权认证
• MySQL-权限系统介绍 • 权限系统的作用是授予来自某个主机的某个用户可以查询.插入.修改.删除等数据库操作的权限 • 不能明确的指定拒绝某个用户的连接 • 权限控制(授权与回收)的执行语句包括 ...
- MySQL权限授权认证详解
MySQL权限授权认证详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL权限系统介绍1>.权限系统的作用是授予来自某个主机的某个用户可以查询.插入.修改.删除 ...
- 关于mysql授权账号权限时的空密码问题
-root ~]$ mysql -uroot -p Enter password:ERROR 1045 (28000): Access denied for user ‘root’@'localhos ...
- MySQL用户认证及权限grant-revoke
一.MySQL用户认证: 登录并不属于访问控制机制,而属于用户身份识别和认证: 1.用户名-user 2.密码-password 3.登录mysqld主机-host 实现用户登录MySQL,建立连接. ...
- MySQL用户认证及权限控制
一.MySQL用户认证: 登录并不属于访问控制机制,而属于用户身份识别和认证: 1.用户名—user 2.密码—password 3.登录mysqld主机—host 实现用户登录MySQL,建立连接. ...
- SpringBoot--- 使用SpringSecurity进行授权认证
SpringBoot--- 使用SpringSecurity进行授权认证 前言 在未接触 SpringSecurity .Shiro 等安全认证框架之前,如果有页面权限需求需要满足,通常可以用拦截器, ...
- IOS第三天-新浪微博 - 版本新特性,OAuth授权认证
*********版本新特性 #import "HWNewfeatureViewController.h" #import "HWTabBarViewController ...
- 七天学会ASP.NET MVC (四)——用户授权认证问题
小编应各位的要求,快马加鞭,马不停蹄的终于:七天学会 Asp.Net MVC 第四篇出炉,在第四天的学习中,我们主要了学习如何在MVC中如何实现认证授权等问题,本节主要讲了验证错误时的错误值,客户端验 ...
- Yii2框架RESTful API教程(二) - 格式化响应,授权认证和速率限制
之前写过一篇Yii2框架RESTful API教程(一) - 快速入门,今天接着来探究一下Yii2 RESTful的格式化响应,授权认证和速率限制三个部分 一.目录结构 先列出需要改动的文件.目录如下 ...
- MVC授权认证
处于安全性考虑,MVC可以完成授权认证,授权认证的方式如下: 1.配置Config文件,设置登录页面: <authentication mode="Forms"> &l ...
随机推荐
- USB眼图常识
最近一段时间,项目需求,需要对USB眼图进行摸底测试.测试过程很简单,然而debug之路却很不简单.不简单往往也就意味着带来了不少收获. 示波器跨接在接收滤波器的输出端,调整示波器扫描周期,使示波器水 ...
- Android 常用的性能分析工具详解:GPU呈现模式
此篇将重点介绍几种常用的Android性能分析工具: 一.Logcat 日志 选取Tag=ActivityManager,可以粗略地知道界面Displaying的时间消耗.当我们打开一个Activit ...
- Pytorch常用的交叉熵损失函数CrossEntropyLoss()详解
本篇借鉴了这篇文章,如果有兴趣,大家可以看看:https://blog.csdn.net/geter_CS/article/details/84857220 1.交叉熵:交叉熵主要是用来判定实际的输出 ...
- Java日期时间API系列26-----Jdk8中java.time包中的新的日期时间API类,YearMonth类的源码,转换和应用。
Java8中为年月新增了类YearMonth,可以用来表示卡片过期时间等问题. 1.YearMonth 默认格式为:2007-12 1.1 部分源码 * * @implSpec * This clas ...
- YashanDB个人版正式开放下载!参与首批体验官活动赢好礼!
好消息!国产数据库YashanDB个人版已正式向所有用户和开发者全面开放下载,该版本已在官网同步上线,欢迎大家前往官网下载体验! 与此同时,YashanDB联合墨天轮技术社区启动首批「产品体验官」尝鲜 ...
- 018 人生中第一次用 Python 写的一个小程序_猜年龄(再次强调,重视基础)
博客配套视频链接: https://space.bilibili.com/383551518?spm_id_from=333.1007.0.0 b 站直接看 配套 github 链接:https:// ...
- Android复习(六)核心组件—>Activity 任何和返回栈、进程和应用生命周期、Parcelable和Bundle
了解任务和返回堆栈 任务是用户在执行某项工作时与之互动的一系列 Activity 的集合.这些 Activity 按照每个 Activity 打开的顺序排列在一个返回堆栈中.例如,电子邮件应用可能有一 ...
- 倒计时 3 天!10.23 相约杭州,云原生 Meetup 等你来!
云原生技术交流 Meetup 杭州站开启,快来报名吧! 活动简介 随着云原生技术的普及,整个市场已经变成了节奏非常快的软件驱动型市场,使用云原生技术栈来迭代发布应用已经成为常态,但是如何更好的应用云原 ...
- KubeSphere 集群配置 NFS 存储解决方案
作者:申红磊,QingCloud 容器解决方案架构师,开源项目爱好者,KubeSphere Member 在正式阅读本文之前,先友情提醒一下:不建议您在生产环境中使用 NFS 存储(特别是 Kuber ...
- Nginx 反向代理 (泛域名->泛域名,https,静态文件)
Nginx 反向代理配置指南 (泛域名 -> 泛域名, HTTPS, 静态文件) 完整版 server { # 监听80端口 listen 80; listen 443 ssl http2;; ...