MySQL——用户和权限管理

  • 由用户名和主机名组成
  • 格式:’user_name’@’host’ host必须要用引号括起来

注意:host可以是一个主机名也可以是具体的ip地址、网段等。

当host为主机名时:
#例如:
user1@'web1.redhat.org'

当host是ip地址或者网段时:
#例如:
tom@172.16.%.%
nacy@'192.168.1.%'
bob@'10.0.0.0/255.255.0.0'
create user 'user_name'@'host'  [IDENTIFIED BY 'password']

注意:
host必须用引号括起来,user_name部分可以忽略引号

创建的用户默认只有登录数据库的权限。

创建用户的时候指定密码:create user user_name identified by ‘password’

例如:

mysql> create user root@'10.0.0.%' identified by 'redhat';
Query OK, 0 rows affected (0.11 sec)
rename user old_name to new_name;

例如:

mysql> create user bob;
Query OK, 0 rows affected (0.01 sec)

mysql> rename user bob@'%' to bob2@'%';
Query OK, 0 rows affected (0.00 sec)
drop user 'user_name'@'host'

例如:

mysql> drop user bob2@'%';
Query OK, 0 rows affected (0.00 sec)

说明:

  • 新版mysql中用户密码可以保存在mysql.user表的authentication_string字段中
  • 如果mysql.user表的authentication_string和password字段都保存密码authentication_string优先生效
  • 使用update来操作表修改密码,需要使用FLUSH PRIVILEGES刷新权限才会生效

不同版本的mysql修改用户的方式有所不同。

mysql5.6不能使用alter user命令来修改密码。可一使用update何set password来修改密码。

mysql5.6的alter user命令只能用来修改用户密码的过期时间。

使用update修改密码:

update mysql.user set password=password('123456') where User="xxx" and Host = "xxx";

使用set password修改密码:

set password for xxx@xxx = password('xxx');

MySQL 5.7.6版本起,user表仅使用authentication_string列代替之前版本中的password列来存储密码

  • 使用没有的字符串 PASSWORD
SET PASSWORD FOR 'jeffrey'@'localhost' = 'password';
  • 使用PASSWORD()函数(pawword()在 MySQL 5.7 中已弃用,在8.0删除了这个函数)
SET PASSWORD FOR 'jeffrey'@'localhost' = PASSWORD('password');
  • 更改用户密码的首选语句:alter user
ALTER USER user@'xxx' IDENTIFIED BY 'auth_string';
--skip-grant-tables:不做权限和账号验证。

--skip-networking:禁止远程连接(空密码远程连接上去危险性大),自己能连上因为不走端口号,走的是socket文件

范例:Mariadb 和MySQL5.6版之前破解root密码

#修改配置文件
[root@centos8 ~]#vim /etc/my.cnf
[mysqld]
skip-grant-tables
skip-networking

#重启mysql
[root@centos8 ~]#systemctl restart mysqld|mariadb

#进入MySQL修改root密码
[root@centos8 ~]#mysql #连接到MySQL
#方法1
#mariadb 旧版和MySQL5.6版之前
MariaDB [(none)]> update mysql.user set password=password('ubuntu') where user='root';

#mariadb 新版
MariaDB [(none)]> update mysql.user set authentication_string=password('ubuntu') where user='root';

#方法2
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> alter user root@'localhost' identified by 'ubuntu';

#注释掉对应文件
[root@centos8 ~]#vim /etc/my.cnf
[mysqld]
#skip-grant-tables
#skip-networking

#重启mysql
[root@centos8 ~]#systemctl restart mysqld|mariadb

范例: MySQL5.7和8.0 破解root密码

#修改配置文件
[root@centos8 ~]#vim /etc/my.cnf
[mysqld]
skip-grant-tables
skip-networking  #MySQL8.0不需要

#重启MySQL服务
[root@centos8 ~]#systemctl restart mysqld
#方法1
mysql> update mysql.user set authentication_string='' where user='root' and
host='localhost';

#方法2
mysql> flush privileges; #再执行下面任意一个命令
mysql> alter user root@'localhost' identified by 'ubuntu';

#进入MySQL后修改root密码为新密码
mysql> set password for root@'localhost'='ubuntu';

#注释掉对应语句
[root@centos8 ~]#vim /etc/my.cnf
[mysqld]
#skip-grant-tables
#skip-networking

#重启mysql
[root@centos8 ~]#systemctl restart mysqld

停止数据库以后,删除掉mysql的所有数据。

重新启动数据库的时候就会重新初始化,相当于重装系统。
注意:测试环境测试。

注意
新建用户的默认权限:USAGE,仅仅能登录数据库系统

数据库、表、字段、管理类、程序类

  • 数据库:对数据库的相关操作权限
  • 表:针对表的相关操作
  • 管理类:查看数据库、创建用户等操作
  • 程序类:针对函数、存储过程、触发器等的操作
  • 所有权限:ALL PRIVILEGES 或 ALL
grant 权限 on db.tb to user [WITH GRANT OPTION]

#*.*:表示所有数据库和所有表
#WITH GRANT OPTION:允许把自己的权限授权给别人

例如:

mysql> grant all on *.* to tom@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> show grants for tom;
+------------------------------------------+
| Grants for tom@%                         |
+------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'tom'@'%' |
+------------------------------------------+
1 row in set (0.00 sec)

在授权的时候创建用户(8.0已经删除这种语法)

grant privilege on db.tb to user identified by 'password'

例如:

mysql> grant all on *.* to bob@'%' identified by 'redhat';
Query OK, 0 rows affected, 1 warning (0.00 sec)
revoke privilege on db.tb for user

例如:

mysql> revoke all on *.* from bob@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> show grants for bob@'%';
+---------------------------------+
| Grants for bob@%                |
+---------------------------------+
| GRANT USAGE ON *.* TO 'bob'@'%' |
+---------------------------------+
1 row in set (0.00 sec)

例如:

mysql> show grants for tom@'%';
+---------------------------------+
| Grants for tom@%                |
+---------------------------------+
| GRANT USAGE ON *.* TO 'tom'@'%' |
+---------------------------------+
1 row in set (0.00 sec)

Original: https://www.cnblogs.com/heyongshen/p/16675885.html
Author: 背对背依靠
Title: MySQL——用户和权限管理

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/578600/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 微信聊天内容可以被监听吗

    上班摸鱼与网络安全 成为了锅叔在博客园阅读数最高的一篇文章,足可见同学们上班摸鱼的热情,同时也反映了大家对网络安全的担忧…… 对于其中的一个存疑问题,&#8…

    Linux 2023年6月13日
    0101
  • 《拉钩课程 – 重学操作系统 – Linux 指令入门》

    1、进程是什么?进程是应用的执行副本。应用的可执行文件是放在文件系统里,把可执行文件启动,就会在操作系统里(具体来说是内存中)形成一个应用的副本,这个副本就是进程。 2、Linux…

    Linux 2023年5月27日
    0114
  • 翻车!误删/usr/lib/引发的血案,从棺材边成功抢救的过程分享。

    写在开篇 血案:本地开发机是CentOS 7,本想删除在/usr/lib/下的一个软链,如:/usr/lib/xxx。当正想删除时,突然被别的事情打扰了一下,回过神之后莫名奇妙的执…

    Linux 2023年6月7日
    0107
  • 聊聊Mysql主从同步读写分离配置实现

    Hi,各位热爱技术的小伙伴您们好,好久没有写点东西了,今天写点关于mysql主从同步配置的操作日志同大家一起分享。最近自己在全新搭建一个mysql主从同步读写分离数据库简单集群,我…

    Linux 2023年6月14日
    098
  • go-select 机制

    select 的用法与 switch 语言非常类似,由 select 开始一个新的选择块,每个选择条件由 case 语句来描述。 与 switch 语句相比,select 有比较多…

    Linux 2023年6月13日
    0101
  • gitlab拉取指定目录

    1.新建目录 mkdir git 2.初始化本地目录 git init 3.启用过滤的配置项 git config core.sparsecheckout true 4.想要拉取哪…

    Linux 2023年6月6日
    096
  • TELE poj1155 题解

    很明显,这道题是以1为根的树,存在最优子问题,因此考虑树形DP。 先看一下样例 常识:利润=收入-成本,也就是:叶节点点权-边权 那么更加明显用dp[i][j]来记录在以i为根节点…

    Linux 2023年6月6日
    0104
  • Python闭包

    前言 学习Python的单例实现的时候,遇到了下面这样的代码。很不理解为什么局部变量 _instance没有重新初始化。后来看到有人说这是闭包,于是又去了解了下 闭包。没想到闭包竟…

    Linux 2023年6月7日
    098
  • 三分钟永久激活WebStorm、PHPStorm、PyCharm、IntelliJ IDEA等JetBrains系列IDE

    前言 本文讲解如何永久激活WebStorm、PHPStorm、PyCharm、IntelliJ IDEA等JetBrains系列IDE,亲测有效,操作简单,一次激活,永久有效,一劳…

    Linux 2023年6月7日
    0144
  • Dockerfile

    Docker可以通过Dockerfile构建镜像。Dockerfile是一个文本文档,它包含用户可以在命令行上调用的所有命令来组装镜像。使用 docker build用户可以创建一…

    Linux 2023年6月13日
    092
  • 到底能不能用 join

    互联网上一直流传着各大公司的 MySQL 军规,其中关于 join 的描述,有些公司不推荐使用 join,而有些公司则规定有条件的使用 join, 它们都是教条式的规定,也没有详细…

    Linux 2023年6月13日
    084
  • docker compose容器编排

    Docker Compose (可简称Compose)是一个定义与运行复杂应用程序的 Docker 工具,是 Docker 官方 编排&…

    Linux 2023年6月8日
    0104
  • 安装 CentOS 7

    1、VMware虚拟机安装 2、CentOS操作系统安装 3、CentOS操作系统配置 3.1、选择语言 3.2、网络和主机名 3.3、日期和时间 3.4、安装位置 3.5、开始安…

    Linux 2023年6月8日
    0123
  • Linux 下安装 node.js

    这里介绍两种安装方式: 编译安装和使用编译后的安装包安装。 安装目录: /usr/local 一、使用编译安装包安装 1、进入安装目录: 2、下载安装包: 3、解压: 4、进入解压…

    Linux 2023年6月13日
    0100
  • JavaScript闭包

    <!doctype html> <html lang="en"> <head> <title>&#x95…

    Linux 2023年6月13日
    084
  • Shell脚本编程中的几个问题

    条件语句 正确的写法: if [ $1 = "-f" ] #注意这里,前后方括号和中间的内容之间必须有空格! then commands fi 错误的写法: i…

    Linux 2023年6月14日
    085
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球