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)

大家都在看

  • 开放平台架构指南

    1.前言 2010年前,大型社交网站如腾讯QQ、新浪微博都搭建了开放平台。中小型互联网公司接入开放平台,能够获取社交平台的海量用户,有效的降低获客成本,获得社交平台的其他能力。对于…

    Linux 2023年6月6日
    073
  • js中对象深度拷贝的方法(浅拷贝)

    JS中,一般的赋值传递的都是对象/数组的引用,并没有真正的深拷贝一个对象(浅拷贝),某些情况下需要用到深度拷贝,可以使用如下写法 let data = {username:&quo…

    Linux 2023年6月14日
    097
  • 国庆专属头像一键生成搭建教程,附源码!

    国庆节马上就要来啦! 没有一个像样的微信头像怎么行。 为此小编为大家带来了一款国庆节国旗头像生成源码,有服务器、域名的朋友可以自行下载上传至服务器之后提供给大家使用。 没有服务器、…

    Linux 2023年6月7日
    0107
  • Question08-查询没学过”张三”老师授课的同学的信息

    * SELECT * FROM Student WHERE SID NOT IN ( SELECT DISTINCT Student.SID FROM Student , SC ,…

    Linux 2023年6月7日
    094
  • Golang中通过go-redis操作Redis

    参考地址:https://github.com/go-redis/redis 定义上下文以及连接的相关信息 var ctx = context.Background() var r…

    Linux 2023年5月28日
    089
  • ASP.NET Core设置URLs的几种方法

    前言 在使用ASP.NET Core 3.1开发时,需要配置服务器监听的端口和协议,官方帮助文档进行简单说明,文档中提到了4种指定URL的方法 设置 ASPNETCORE_URLS…

    Linux 2023年6月8日
    072
  • 浅谈kali : arpspoof工具原理

    介绍 arpspoof是一个通过ARP协议伪造数据包实现中间人攻击的kali工具。 中间人攻击虽然古老,但仍处于受到黑客攻击的危险中,可能会严重导致危害服务器和用户。仍然有很多变种…

    Linux 2023年6月14日
    081
  • 利用Hugo与GitHub仓库搭建免费的个人博客

    软件下载 配置环境变量 检验环境变量 创建博客文件 创建站点文件夹 下载主题 新建博客 将个人博客部署到github存储仓库 保姆级 基于Win10环境下的Hugo免费博客搭建 软…

    Linux 2023年6月7日
    0106
  • 人人都写过的5个Bug!

    大家好,我是良许。 计算机专业的小伙伴,在学校期间一定学过 C 语言。它是众多高级语言的鼻祖,深入学习这门语言会对计算机原理、操作系统、内存管理等等底层相关的知识会有更深入的了解,…

    Linux 2023年5月27日
    0125
  • 最短的可通过编译的C语言程序

    要求:写一个最短的,能通过编译的C语言程序,但不要求能正确运行。 一般人首先想到的是除0。即 除0会引发SIGFPE信号(浮点异常)。 我们也可以删掉return,但是这样做的话编…

    Linux 2023年6月14日
    085
  • Ubuntu16.04部署django+nginx项目

    项目使用django+nginx部署。这个项目断断续续地部署4遍了。感觉每次部署都挺费时间的(找各种配置的资料),于是写一个博客总结一下。 安装vsftpd $ sudo apt-…

    Linux 2023年6月7日
    062
  • apache tomcat 目录session应用信息漏洞

    Tomcat 是一款开源的 Web 应用服务器软件。Tomcat 属于轻量级应用服务器,在中小型系统和并发访问用户不多的场合下被普遍使用,是开发和调试 JSP 程序的首选。 漏洞描…

    Linux 2023年6月7日
    0124
  • mit 6.824 lab2B,raft日志复制(lab2D中有关于此处大量代码修改找出了很多错误)

    lab2 说明: https://pdos.csail.mit.edu/6.824/labs/lab-raft.html 参考博客: https://zhuanlan.zhihu….

    Linux 2023年6月7日
    088
  • LeetCode-125. 验证回文串

    题目来源 题目详情 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。 说明: 本题中,我们将空字符串定义为有效的回文串。 示例 1: 输入: &#8…

    Linux 2023年6月7日
    084
  • 四大高阶函数、匿名函数、递归

    四大高阶函数: map、reduce、filter、sorted 1.map函数: 根据提供的函数对指定序列做映射 使用可迭代对象(指定的序列)中的每个元素调用函数,将返回值作为新…

    Linux 2023年6月8日
    0101
  • 数据库的灾备

    数据是企业重要的生产资料,关键数据的丢失可能会给企业致命一击,因为数据是计算机系统存在的原因和基础。数据往往是不可再生的,一旦发生数据丢失,企业就会陷入困境:客户资料、技术文件、财…

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