一、MySQL用户认证:

登录并不属于访问控制机制,而属于用户身份识别和认证:

  1.用户名—user

  2.密码—password

  3.登录mysqld主机—host

实现用户登录MySQL,建立连接。

MySQL的整个访问控制包括两大块:用户管理模块、访问控制模块

MySQL中用户管理模块的信息存储在系统表mysql.user中

mysql> SELECT * FROM mysql.user;

存放的信息:授权用户的基本信息、权限信息

首先:以root用户登录---shell> mysql -u root -p

1、新建用户---localhost本地主机、%表示任何登录

mysql> create user 'u1'@'172.16.12.24' identified by '';
mysql> create user 'u1'@'172.16.11.99' identified by '';
mysql> create user 'u2'@'%' identified by '';

mysql> select user,host from mysql.user;
+-----------+--------------+
| user | host |
+-----------+--------------+
| u2 | % |
| u1 | 172.16.11.99 |
| u1 | 172.16.12.24 |
| mysql.sys | localhost |
| root | localhost |
+-----------+--------------+
rows in set (0.00 sec)

2、删除用户

mysql> use mysql;

mysql> delete from user where User='u1' and Host='172.16.11.99';

mysql> flush privileges;

3、修改用户名

语法:该语句不影响用户的密码

  RENAME USER old_user  TO  new_user

    [, old_user  TO  new_user] ...

mysql> rename user 'u1'@'172.16.12.24' to 'win.user'@'172.16.12.24';

mysql> rename user 'u2'@'%' to 'back'@'127.0.0.1';

4、修改用户密码

①推荐方法:

mysql> alter user '用户名'@'登录主机' identified by '密码(自定义)';

②传统方法(mysql5.6):

语法:

  SET PASSWORD [FOR user_name] = password_option;

缺省for user_name是给当前用户修改密码

mysql> SET PASSWORD FOR '用户名'@'登录主机' = PASSWORD('密码');

5、破解密码

先关闭mysqld服务

①查看跳过授权表参数

  shell> mysqld --verbose --help

    --skip-grant-tables

②修改/etc/my.cnf文件,注释密码策略参数

③安全启动mysql

  shell> mysqld_safe --skip-grant-tables &

④无密码登录mysql -uroot

mysql> flush privileges;    #加载授权表

然后进行修改密码

最后重启数据库,用修改的密码进行登录验证即可

二、MySQL的授权:

  1.系统权限

  2.针对某一个数据库

  3.某一个数据库里面的某一张表

  4.某一个数据库里面的某一张表的某一个列

1、按照权限的授予级别,分类:

  ①全局权限Global Privileges:管理权限,应用到服务器上的所有数据库上(全局权限保存在 mysql.user 表中)-----on *.*

  ②数据库权限Database Privileges:应用到某个特定数据库的所有对象上(数据库权限保存在 mysql.db 表中)-----on db_name.*

  ③表权限Table Privileges:应用到某个特定表的所有列上(表权限保存在 mysql.tables_priv 表中)-----on db_name.tbl_name

  ④列权限Column Privileges:应用到某个特定表的单个列上(列权限保存在 mysql.columns_priv 表中)-----在权限名称后面跟小括号,其中写上列名

  ⑤存储例程权限Stored Routine Privileges:应用到存储过程和函数上(存储例程权限保存在 mysql.procs_priv表中)

  ⑥代理用户权限Proxy User Privileges:使一个用户成为另一个用户的代理(代理用户权限保存在 mysql.proxies_priv表中)

2、基本格式:grant 权限类型 on [对象类型] 某数据库.某表 to 用户名@登录主机; 

  1、u1可以访问所有数据库的所有表,select

    mysql> grant select on table *.* to 'u1'@'172.16.12.24';

  2、u1可以访问test数据库的所有表,insert

    mysql> grant insert on table test.* to 'u1'@'172.16.12.24';

  3、u2可以访问test数据库里面的t1

    mysql> grant all on table test.t1 to 'u2'@'%';

  4、u2可以访问test数据库里面的t1(id列)

    mysql> grant select (id) on table test.t1 to 'u2'@'%';

3、grant里的新建用户(且授权):

  mysql> grant all on *.* to 'zhang'@'%' identified by '123' with grant option;

with grant option子句

  ---通过在grant语句的最后使用该子句,就允许被授权的用户把得到的权限继续授给其它用户。

问:能否新建用户但不设密码?

mysql>  grant all on *.* to 'u3'@'%' with grant option;

ERROR 1133 (42000): Can't find any matching row in the user table

#u3是个未知用户,不定义密码就是授权操作,因此报错没有匹配的用户

解决:

①查看变量sql_mode的值

mysql> show variables like 'sql_mode';

……NO_AUTO_CREATE_USER……    #不自动创建用户(set去掉此项修改sql_mode参数)

  MySQL服务器可以以不同的SQL模式来操作,并且可以为不同客户端应用不同模式;

  如此,每个应用程序可以根据自己的需求来定制服务器的操作模式;

  sql_mode模式定义了MySQL应支持的SQL语法,以及应该在数据上执行何种确认检查;通过sql_mode设置,就能在众多不同的环境下、与其他数据库服务器一起更容易地使用MySQL;MySQL常用的有三种SQL模式:传统模式TRADITIONAL、严格模STRICT、ANSI模式;

②修改变量sql_mode的值

mysql>set @@session.sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

Query OK, 0 rows affected, 1 warning (0.00 sec)

③新建无密码用户u3且授权

mysql>  grant all on *.* to 'u3'@'%' with grant option;

Query OK, 0 rows affected, 1 warning (0.01 sec)

4、废除(revoke)权限

语法:

  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] ...

基本格式:revoke 权限类型 on [对象类型] 权限级别(库表) from user;

mysql> revoke all on *.* from 'u3'@'%';

# Tips 注意:

  使用 grant、revoke 的时候都会修改 user 数据表,也会同步修改内存中的 hash 结构,即时生效,也就没有必要跟着执行 flush privileges 命令;

  flush privileges 使用场景:加载用户权限。直接使用 DML 操作系统权限表,会导致权限数据跟内存中的权限数据不一致,这时就是需要使用 flush privileges 重建内存数据,达到权限一致状态。

MySQL用户认证及权限控制的更多相关文章

  1. MySQL用户认证及权限grant-revoke

    一.MySQL用户认证: 登录并不属于访问控制机制,而属于用户身份识别和认证: 1.用户名-user 2.密码-password 3.登录mysqld主机-host 实现用户登录MySQL,建立连接. ...

  2. 用Python建设企业认证和权限控制平台

    目前大家对Python的了解更多来源是数据分析.AI.运维工具开发,在行业中使用Python进行web开发,同样也是非常受欢迎的,例如:FaceBook,豆瓣,知乎,饿了么等等,本文主要是介绍是利用P ...

  3. Spring Boot 2.X(十八):集成 Spring Security-登录认证和权限控制

    前言 在企业项目开发中,对系统的安全和权限控制往往是必需的,常见的安全框架有 Spring Security.Apache Shiro 等.本文主要简单介绍一下 Spring Security,再通过 ...

  4. MySQL 用户管理与权限管理

    MySQL 用户管理与权限管理 -- 操作环境mysql> show variables like 'version';  +---------------+--------+| Variabl ...

  5. Mysql用户管理及权限分配

    早上到公司,在服务器上Mysql的数据库里新建了个database,然后本地的系统里用原来连接Mysql账号admin连这个数据库.结果报错了,大概是这样子的: Access denied for u ...

  6. MySQL用户管理及权限设置

    mysql 用户管理和权限设置 用户管理 mysql>use mysql; 查看 mysql> select host,user,password from user ; 创建 mysql ...

  7. SpringSecurity 自定义用户 角色 资源权限控制

    SpringSecurity 自定义用户 角色 资源权限控制 package com.joyen.learning.security; import java.sql.ResultSet; impor ...

  8. Oracle 用户管理与权限控制

    Oracle 用户管理与权限控制 oracle数据库的权限系统分为系统权限与对象权限.系统权限( database system privilege )可以让用户执行特定的命令集.例如,create ...

  9. RabbitMQ用户增删及权限控制

    RabbitMQ用户增删及权限控制 用户角色分类 none:无法登录控制台 不能访问 management plugin,通常就是普通的生产者和消费者. management:普通管理者. 仅可登陆管 ...

随机推荐

  1. 使用postman测试文件上传

    调试API神奇----postman 请求方法:POST Body-->form-data-->key(选择file) QQ技术交流群:282575808 ---------------- ...

  2. 关于Unity中物理检测的准备

    1.要确定每个物体的碰撞类型,是有碰撞效果的碰撞还是没有碰撞效果的碰撞(is trigger),带不带刚体. 2.给每个物体分层,再设置哪些层会发生碰撞,哪些完全不产生碰撞. 3.给每个物体设置标记, ...

  3. mxnet卷积计算

    #coding:utf-8 ''' 卷积计算 ''' import mxnet as mx from mxnet.gluon import nn from mxnet import ndarray a ...

  4. Data source rejected establishment of connection, message from server: "Too many connections"

    详细错误信息: Caused by: com.MySQL.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source ...

  5. Html中怎么用CSS让ul中多个li标签不换行横排显示

    布局 通常有三种方式 { 1. position 2. float: left --> 其次是这个 3. block: inline-block  --> 他们推荐我用这个 } 具体描述 ...

  6. 第三百五十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—将selenium操作谷歌浏览器集成到scrapy中

    第三百五十一节,Python分布式爬虫打造搜索引擎Scrapy精讲—将selenium操作谷歌浏览器集成到scrapy中 1.爬虫文件 dispatcher.connect()信号分发器,第一个参数信 ...

  7. NetBeans IDE集成Maven

    NetBeans6.7更新版本已经内置对Maven支持.如遇以前的版本,Maven插件在插件管理器中可用.我们正在使用NetBeans在这个例子中使用6.9. 在NetBeans一些特点如下 您可以从 ...

  8. webpy 使用python3开发

    由于做服务器时总是需要调式与客户端的各种协议,由于种种原因客户端总是滞后的.所以一直想做个协议调试工具.postman是一个好东西,不过如果前后协议之间有关联,就不是很好用了. 之前用python写过 ...

  9. java web 过滤器跟拦截器的区别和使用

    注:文章整理自知乎大牛以及百度网友(电脑网络分类达人 吕明),特此感谢! 一.过滤器 1.什么是过滤器? 过滤器是一个程序,它先于与之相关的servlet或JSP页面运行在服务器上.过滤器可附加到一个 ...

  10. EF5+MVC4系列(8) ActionResult的返回值

    我们在MVC的代码中,经常会看到这样的一个 代码 可能有人会有疑问,既然我定义的是ActionResult,为什么返回值会是View方法呢? 其实这个View方法的返回值的类型是ActionResul ...