MYSQL中mysql数据库的用户表User表

2023-11-14

前言
新建MySQL时,会自动安装一个mysql的数据库,该数据库下面的表都是权限表。
其中:user表是最重要权限表。记录了允许连接到服务器的账号信息以及一些全局权限信息。
user表有42个字段,大致分为4类:用户列、权限列、安全列及资源控制列。
mysql用户表中host字段,如果host设置不正确,可能导致无法连接mysql数据库。
user_name@host_name,其中host_name是主机IP地址或主机名。
1)为了能够在本地访问MySQL,使用localhost 或回路地址127.0.0.1。
2)如果使用通配符%作为主机,则允许客户端指定用户从任意主机连接。
3)主机指定为127.0.0.1时,会通过TCP/IP协议连接,并且只能在本机访问;
4)主机指定为localhost时,localhost不会被解析成IP地址,直接通过UNIXsocket连接,并且只能在本机访问。
通过上面可以知道,host为不同的值的时候,驱动字符串的server要使用不同的内容,哪怕是root用户也要遵从host的设定。

下面介绍两种添加mysql用户的命令行方法:

方法一:CREATE USER语句

CREATE USER <用户> [ IDENTIFIED BY [ PASSWORD ] 'password' ] [ ,用户 [ IDENTIFIED BY [ PASSWORD ] 'password' ]]
1<用户>:格式为 'user_name'@'host_name',这里的user_name是用户名,host_name为主机名,即用户连接 MySQL 时所用主机的名字。
如果在创建的过程中,只给出了用户名,而没指定主机名,那么主机名默认为"%",表示一组主机,即对所有主机开放权限。
2、IDENTIFIED BY子句:用于指定用户密码。新用户可以没有初始密码,若该用户不设密码,可省略此子句。
3、PASSWORD 'password':PASSWORD 表示使用哈希值设置密码,该参数可选。如果密码是一个普通的字符串,则不需要使用 PASSWORD 关键字。
'password' 表示用户登录时使用的密码,需要用单引号括起来。
这种方式不便授予用户权限,新创建的用户拥有的权限很少,它们只能执行不需要权限的操作。如登录 MySQL、使用 SHOW 语句查询所有存储引擎和字符集的列表等。
如果两个用户的用户名相同,但主机名不同,MySQL 会将它们视为两个用户,并允许为这两个用户分配不同的权限集合。

实例:

mysql> CREATE USER 'test1'@'localhost' IDENTIFIED BY 'test1'; # localhost表示只有本机可以登录
mysql> CREATE USER 'test1'@'%' IDENTIFIED BY 'test1'; # %表示任何主机都可以登陆

在实际应用中,我们应避免明文指定密码,可以通过 PASSWORD 关键字使用密码的哈希值设置密码。
在 MySQL 中,可以使用 password() 函数获取密码的哈希值。

mysql> SELECT password('test1');
+-------------------------------------------+
| password('test1')                         |
+-------------------------------------------+
| *06C0BF5B64ECE2F648B5F048A71903906BA08E5C |
+-------------------------------------------+
1 row in set, 1 warning (0.00 sec)
mysql> CREATE USER 'test1'@'localhost' IDENTIFIED BY PASSWORD '*06C0BF5B64ECE2F648B5F048A71903906BA08E5C';
Query OK, 0 rows affected, 1 warning (0.00 sec)
# 执行成功后就可以使用密码"test1"登录了。

方法二:GRANT语句(常用)
GRANT 语句是 MySQL 中一个非常重要的语句,它可以用来创建用户、修改用户密码和设置用户权限。

GRANT priv_type ON database.table TO <用户> [IDENTIFIED BY [PASSWORD] 'password']
1、priv_type 参数表示新用户的权限。
2database.table 参数表示新用户的权限范围,即只能在指定的数据库和表上使用自己的权限。
3<用户> 参数指定新用户的账号,由用户名和主机名构成。
4、IDENTIFIED BY 关键字用来设置密码。
5、PASSWORD 表示使用哈希值设置密码,该参数可选。
6、password 参数表示新用户的密码。
GRANT语句不仅可以创建新用户,还可以对用户进行授权。
该语句会自动加载权限表,不需要手动刷新。
而且安全、准确、错误少。
使用GRANT语句创建用户是最常用的方法。
创建用户时,MySQL会对用户的密码自动加密,以提高安全性。

实例:

# 创建新用户:用户名user01,密码123,所有主机,授予对test数据库的student表有查询权限。
mysql> GRANT SELECT ON test.student TO `user01`@`%` IDENTIFIED BY `123`
mysql> GRANT SELECT ON *.* TO 'test3'@localhost IDENTIFIED BY 'test3';
# 其中,*.*表示所有数据库下的所有表。结果显示创建用户成功,且test3用户在本机对所有表都有查询(SELECT)权限。
# 授权'user'用户可以操作'db_test'库的所有权限
mysql> GRANT ALL PRIVILEGES on db_test.* TO user@'%';
# 授权用户'user'可以操作'db_test'库的所有权限,密码为'passwd'
mysql> GRANT ALL PRIVILEGES ON db_test.* TO user@'%' IDENTIFIED BY 'passwd';
# 授权user可以操作db_test库的指定的权限,密码为'passwd'
mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, REFERENCES, INDEX, ALTER ON db_test.* TO user@'%' IDENTIFIED BY 'passwd';
# 刷新权限,执行grant语句后要刷新一下权限
mysql> FLUSH PRIVILEGES;

其他一些操作用户表语句

# 删除授权 REVOKE语句
mysql> revoke privileges (columns) on what from user;
mysql> revoke all PRIVILEGES ON `db_test`.* from 'user'@'%';   # 收回db_test全部权限
mysql> REVOKE INSERT ON *.* FROM 'user04'@'localhost';    # 收回Insert权限
# 删除用户 方法一
mysql> delete from mysql.user where user='user' and host='%';
# 删除用户 方法二
mysql> DROP USER 'username'@'host';
# 修改用户密码 
# 以下方法适用于mysql5.6及以下版本,5.7以上版本会报错,因为5.7以上版本没有password字段,而是改成了authentication_string字段
mysql> UPDATE mysql.user SET password=PASSWORD('新密码') WHERE User='root' AND Host = 'localhot';
# 以下方法适用于5.7以上版本
mysql> UPDATE mysql.user SET authentication_string=PASSWORD('新密码') WHERE User='root' AND Host = 'localhot';
# 查看用户权限
mysql> show grants for 'username'@'host';
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MYSQL中mysql数据库的用户表User表 的相关文章

  • MySQL - 重命名列

    如何重命名 mysql 列help to content在我的桌子上tbl help mysql query ALTER TABLE tbl help CHANGE COLUMN help content 您必须在更改列语句中包含列的定义
  • 使用 Coldfusion 分页

    是否可以仅使用一个查询在 Coldfusion 中分页并显示页数 我的理解是 您显然可以使用一个查询进行分页 但您需要一个额外的查询来创建页面 这是为了计算结果总数 currentPage 1 resultsPerPage Offset i
  • LEFT JOIN 返回与 INNER JOIN 相同的结果

    我有一张桌子 磨砂膏 里面有 1600 个独特的物品 第二张桌子有100万以上 我运行 INNER JOIN 并获得 65 个匹配项 SELECT a BW Parent Number a Vendor Name b Parent Supp
  • sqlalchemy 中的随机 ID(pylon)

    我正在使用 pylons 和 sqlalchemy 我想知道如何将一些随机 id 作为primary key 最好的方法是使用随机生成的 UUID import uuid id uuid uuid4 uuid 数据类型在某些数据库中本机可用
  • mysql - 有什么方法可以帮助使用另一个索引进行全文搜索?

    假设我有一个 文章 表 其中包含以下列 article text fulltext indexed author id indexed 现在我想搜索特定作者撰写的文章中出现的术语 所以像这样 select from articles whe
  • MySQL 性能 DELETE 或 UPDATE?

    我有一个超过 10 7 行的 MyISAM 表 向其中添加数据时 我必须在最后更新 10 行 删除它们然后插入新行更快 还是更新这些行更快 应更新的数据不是索引的一部分 索引 数据碎片怎么样 UPDATE到目前为止要快得多 当你UPDATE
  • 主机 localhost 不允许连接到此 MySQL 服务器 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我不小心删除了我的用户表 删除了所有用户 现在每当我尝试访问我的数据库时 它都会说 主机本地主机不允许连接到此 MYSQL 服务器 我试过
  • MySQL 中有“connect by”替代方案吗?

    如果我使用 Oracle 有connect by可用于创建分层查询的关键字 目前我正在一个项目中使用MySQL 我想知道是否有替代方案connect by在 MySQL 中 我尝试过谷歌 但到目前为止还没有结果 我想要实现的是通过一个查询从
  • 找时间通过 PHP 执行 MySQL 查询

    我在互联网上看到过这个问题 here http www phpbuilder com board showthread php t 2100256 and here http answers yahoo com question index
  • 使用 PHP 将文件上传到 MySql DB

    我希望用户通过我在后端使用 MySql 用 PHP 开发的 web 应用程序上传文件 我想将文件存储在数据库中 我在这样做时遇到了问题 此外 一旦文件存储在数据库中 我们如何下载它 并在 web 应用程序中正确显示它 文件类型和文件的其他属
  • 选择每组最新的项目[重复]

    这个问题在这里已经有答案了 可能的重复 检索每组中的最后一条记录 https stackoverflow com questions 1313120 retrieving the last record in each group 我有 2
  • Delphi XE5 FireDAC 错误:无法加载供应商库 [libmysql.dll 或 libmysqld.dll]

    我在 Windows 7 64 位上使用 Delphi XE5 只是尝试 FireDAC 组件 我正在使用一个 TFDConnection 组件连接到本地 MySQL 数据库 v5 6 15 我已经将 libmysql dll 32位 v5
  • DBX 错误:驱动程序无法正确初始化

    我在跑步德尔福XE3 终极版 MySQL 数据库 这是我点击时收到的错误Test Connection 作为回应 我在 xampp 目录中找到了 libmysql 库 并将其复制到我的 System32 目录中 但这是行不通的 此消息指的是
  • 日常 MySQL(部分和过滤)复制的最佳实践?

    我有一个相当大的数据库 有超过 40 个表 我只需要复制几个表 5 并且每个表也被过滤 我正在寻找一些复制这些数据的最佳实践 每天就足够了 我可以只选择几个表并为每个表包含一些 WHERE 子句 我正在考虑为每个表启动 mysqldump
  • 如何查找所有mysql表之间的所有关系?

    如何找到MySQL所有表之间的所有关系 例如 如果我想知道大约有 100 个表的数据库中表的关系 有什么办法知道这个吗 从编程角度来说 更好的方法是从以下位置收集数据 INFORMATION SCHEMA KEY COLUMN USAGE表
  • MySQL解释更新

    作为我大学复习的一部分 我试图回答以下问题 至少在表的一个属性上创建索引 employees 数据库 您可以在其中使用 MySQL EXPLAIN 工具 清楚地显示好处 在条款或检索方面 和负面 在 更新条款 创建相关索引的信息 对于第一部
  • SQL 查询结果为字符串(或变量)

    是否可以将SQL查询结果输出到一个字符串或变量中 我的php和mysql不好 假设我有数据库 agents 其中包含列 agent id agent fname agent lname agent dept 使用此查询 sql SELECT
  • 如何更新 MySQL 数据库中的两列?

    这不起作用 UPDATE customers SET firstname John AND lastname Smith WHERE id 1 用逗号分隔值 AND是一个逻辑运算符 它的位置是WHERE and ON条款 UPDATE cu
  • Unicode(希腊语)字符存储在数据库中,例如“??????”

    数据库中的希腊字符就像问号 我找不到解决办法 我使用 Java Swing 开发了一个应用程序 但是当我在 MySQL 中插入希腊字母时 就像问号一样 我将数据库排序规则更改为 utf8 并将列也更改为 utf8 我的项目编码设置为UTF
  • 无法将句子插入数据库

    我有一些句子 我必须选择由 6 个以上单词组成的句子 然后它们将被插入到数据库中

随机推荐

  • Landsat数据下载

    Landsat数据下载步骤 0 Landsat数据介绍 1 下载地址 2 下载步骤 2 1 检索数据 2 1 1 设置地点 有多种方法 2 1 2 选择时间范围 2 1 3 在Data Sets界面选择传感器 卫星或者传感器的名称 2 2
  • el-select可以输入选择项以及选择某一项后出现输入文本框

    效果 直接上代码做笔记 通过ref属性获取输入内容 在 blur中进行赋值 很好的实现了可选择 可输入
  • 进程概念

    基本概念 进程是程序的一个执行实例 从内核来看 进程是担当分配系统资源的实体 注 在Linux操作系统中 大多数指令都是创建了一个个的进程 操做系统如何管理内存 答 使用一个结构体 PCB 来描述进程 使用高效的数据结构来组织进程 描述进程
  • 学习记录-Qt读取条码扫描枪

    一 条码简介 条形码 barcode 是将宽度不等的多个黑条和空白 按照一定的编码规则排列 用以表达一组信息的图形标识符 常见的条形码是由反射率相差很大的黑条 简称条 和白条 简称空 排成的平行线图案 条形码可以标出物品的生产国 制造厂家
  • git强制更新(覆盖)本地仓库与远程仓库一致

    问题描述 在远程改好代码 且改动较多 不想耗费精力进行合并的操作 于是想强制覆盖本地仓库 解决方案 使用以下指令 git fetch all git reset hard origin master
  • 在kali中常见的三种扫描

    第一步 确保要扫描的电脑和执行扫描的电脑是否在同一个网段上 Kali里面查看ip地址的命令为ifconfig ifconfig Win7系统查看IP地址的命令为ipconfig ipconfig 在kali中输入ping 192 168 5
  • 多级菜单 jquery折叠菜单

    多级jquery折叠菜单 前言 效果图 分析 前言 先上代码 DOCTYPE html gt
  • C++模板初阶

    C 模板初阶 泛型编程 函数模板 概念 函数模板格式 函数模板原理 函数模板的实例化 模板参数的匹配原则 类模板 类模板的定义格式 类模板的实例化 泛型编程 我们前面学习了C 的函数重载功能 那么我们如何实现一个通用的交换函数呢 比如 我传
  • git上传遇到 GitHub could not read Username 的解决办法

    Gitversion 1 8 5 2 执行git push命令异常 如下 1 Push failed 2 Failed with error unable to read askpass response from C Users eddy
  • Springboot学习笔记5:整合JDBC

    一 什么是JDBC 在web开发中 不可避免的地要使用数据库来存储和管理数据 为了在java语言中提供数据库访问的支持 Sun公司于1996年提供了一套访问数据的标准Java类库 即JDBC JDBC的全称是Java数据库连接 Java D
  • computed与watch的区别

    一 computed与watch 在之前的练习中本人碰到computed来监听某个数据变化 我们都知道computed与watch都是可以监听数据变化 但具体要怎么区别它们呢 1 1 watch 1 1 1 watch的简单执行
  • xss原理和分类

    前言 准备智警杯的过程中 也不能掉下漏洞的学习 浅浅学习一下关于xss的一些知识 何为xss 全名跨站脚本攻击 也属于注入 属于代码注入的一种 由于未进行严格的过滤 haker可以将恶意代码注入到网页当中 其他用户在访问该网页时会执行恶意代
  • 真的!!!两行css代码实现瀑布流,html,css最简单的瀑布流实现方式且没有缺点!...

    给前端宇宙加星标 提升前端小宇宙 作者 coder94 https segmentfault com a 1190000017866549 两行css如下 列间距 可有可无 默认30px column gap 0 效果图如下
  • IDEA导入Spring源码环境搭建

    一 环境准备 1 Spring源码包 下载地址 https github com spring projects spring framework 2 gradle工具 下载地址 http downloads gradle org dist
  • 获取APP签名信息或者查看签名文件的MD5,SHA1,SHA256

    1 查看APP是否签名 将APP文件后缀改为 zip并解压会得到以下内容 CERT RSA就包含签名信息 然后运行命令 keytool printcert file Users Documents app release META INF
  • uni-app 开放生态

    uni app 积极拥抱社区 创建了开放 兼容的生态系统 uni app插件市场 有数千款插件 支持前端组件 js sdk 页面模板 项目模板 原生插件等多种类型 在生态建设上远远领先于竞品 兼容 微信小程序 JS SDK 丰富的小程序生态
  • sql注入之报错注入

    目录 1 常用报错的函数 2 其他函数 一 extractvalue 二 updetaxml 1 常用报错的函数 1 extractvalue 2 updataxml 3 floor 2 其他函数 1 substring extractva
  • 数论入门笔记

    数论入门笔记 目录 数论入门笔记 一 数论是什么 二 数论基础 1 欧几里德算法 辗转相除法 2 有关素数的基础算法 单个整数素性测试 简单素数筛 多个整数素性测试 埃氏筛法 Eratosthenes筛法 区间筛法 欧拉筛法 线性筛法 3
  • VC++ Gdiplus::Bitmap抠图

    void SetBackgroundMaskImage LPCTSTR lpszImageName COLORREF crAlpha RGB 255 0 0 Gdiplus Bitmap pBkgrMaskBitmap CImageFact
  • MYSQL中mysql数据库的用户表User表

    前言 新建MySQL时 会自动安装一个mysql的数据库 该数据库下面的表都是权限表 其中 user表是最重要权限表 记录了允许连接到服务器的账号信息以及一些全局权限信息 user表有42个字段 大致分为4类 用户列 权限列 安全列及资源控