数据库中的用户管理和权限管理

​ 我们进行数据库操作的地方其实是数据库的客户端,是我们在客户端将操作发送给数据库的服务器(MySQL的服务器是mysqld),由数据库处理之后发送回来处理结果(其实就是一种网络服务)。所以可以存在多个客户端连接数据库的服务器,实现多用户进行数据库操作。

​ 那么数据库中就一定存在数据库用户的管理:创建用户、删除用户、用户授权、回收权限、修改用户密码等等。(本篇使用MySQL数据库进行案例演示)

​ 本篇一共分为两个部分:用户管理和权限管理。

文章目录

      • 用户管理
        • 用户信息
        • 创建用户
        • 删除用户
        • 修改用户密码
      • 数据库权限
        • 给用户授予权限
        • 回收权限
        • 查看权限

用户管理

​ 若我们平时只能使用root用户,这样会存在很大的安全隐患,所以我们需要创建出普通用户来进行数据库操作。

在这里插入图片描述

​ 如上所示,普通用户只能操作某些数据库,而root用户则可以队所有的数据库进行操作。

用户信息

​ 在MySQL中的用户,他们的信息豆存储在mysql的user表中,如下:

在这里插入图片描述

​ 如上所示,在user表中包含太多的字段,其中:

  • host:表示这个用户可以从哪个主机登陆,若是localhost,表示只能本机登陆
  • user:用户名
  • authentication_string:用户密码通过password函数加密之后的
  • *_prev:用户拥有的权限
  • 其余的字段就不解释了

​ 我们查看当前主机有哪些用户,如下:

mysql> select host, user, authentication_string from user; 
+-----------+---------------+-------------------------------------------+
| host      | user          | authentication_string                     |
+-----------+---------------+-------------------------------------------+
| localhost | root          |                                           |
| localhost | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| localhost | mysql.sys     | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
+-----------+---------------+-------------------------------------------+
3 rows in set (0.00 sec)
创建用户

​ 语法:

create user '用户名'@'登陆主机/ip' identified by '密码';

​ 案例如下:

mysql> create user 'jzhong'@'localhost' identified by '200408';
Query OK, 0 rows affected (0.05 sec)mysql> select host, user, authentication_string from user; 
+-----------+---------------+-------------------------------------------+
| host      | user          | authentication_string                     |
+-----------+---------------+-------------------------------------------+
| localhost | root          |                                           |
| localhost | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| localhost | mysql.sys     | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| localhost | jzhong        | *D3C61059D1EE1A7188CDADAE833E4B12BAED31E6 |
+-----------+---------------+-------------------------------------------+
4 rows in set (0.01 sec)-- 用户创建好之后,我们就可以使用新用户登陆啦:
jzhong@hcss-ecs-dc20:~$ mysql -ujzhong -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 38
Server version: 5.7.29 MySQL Community Server (GPL)Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> 

​ 关于新增用户这里,注意不要轻易添加一个可以在任意地方登陆的user!!!不要将ip地址暴露在公网上!!!这是一种很危险的行为。

删除用户

​ 删除用户语法:

drop user '用户名'@'主机名'

​ 删除用户也可以在user数据库下使用delete操作直接删除对应的用户,不过这样的操作通常不建议。

​ 案例如下:

-- 查询当前系统中有哪些用户
mysql> select user, host, authentication_string from user;
+---------------+-----------+-------------------------------------------+
| user          | host      | authentication_string                     |
+---------------+-----------+-------------------------------------------+
| root          | localhost |                                           |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys     | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| jzhong        | localhost | *D3C61059D1EE1A7188CDADAE833E4B12BAED31E6 |
+---------------+-----------+-------------------------------------------+
4 rows in set (0.00 sec)-- 删除jzhong用户
-- 删除用户的时候还需要加上对应的host
mysql> drop user jzhong;
ERROR 1396 (HY000): Operation DROP USER failed for 'jzhong'@'%'
mysql> drop user jzhong@localhost;
Query OK, 0 rows affected (0.00 sec)mysql> select user, host, authentication_string from user;
+---------------+-----------+-------------------------------------------+
| user          | host      | authentication_string                     |
+---------------+-----------+-------------------------------------------+
| root          | localhost |                                           |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys     | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
+---------------+-----------+-------------------------------------------+
3 rows in set (0.00 sec)
修改用户密码

​ 修改密码可以是修改自己的密码,也可以是修改指定用户的密码:

-- 修改自己的密码
set password = password('新的密码');-- root修改指定用户的密码
set password for '用户名'@'主机名' = password('新的密码');

​ 案例如下:

mysql> select user, host, authentication_string from user;
+---------------+-----------+-------------------------------------------+
| user          | host      | authentication_string                     |
+---------------+-----------+-------------------------------------------+
| root          | localhost |                                           |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys     | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| jzhong        | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+---------------+-----------+-------------------------------------------+
4 rows in set (0.00 sec)mysql> set password for 'jzhong'@'localhost' = password('200408');
Query OK, 0 rows affected, 1 warning (0.00 sec)mysql> select user, host, authentication_string from user;
+---------------+-----------+-------------------------------------------+
| user          | host      | authentication_string                     |
+---------------+-----------+-------------------------------------------+
| root          | localhost |                                           |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys     | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| jzhong        | localhost | *D3C61059D1EE1A7188CDADAE833E4B12BAED31E6 |
+---------------+-----------+-------------------------------------------+
4 rows in set (0.00 sec)

​ 修改密码之后,对应位置的md5值都不一样了。

数据库权限

​ 对于刚创建的用户没有任何权限,需要给用户授权用户才能对数据库进行操作,如下:

-- 查看当前登陆mysql的用户
mysql> select user();
+------------------+
| user()           |
+------------------+
| jzhong@localhost |
+------------------+
1 row in set (0.00 sec)-- 当前能查看的数据库只有一个
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
+--------------------+
1 row in set (0.02 sec)-- 使用数据库时无对应的权限
mysql> use infromation_schema;
ERROR 1044 (42000): Access denied for user 'jzhong'@'localhost' to database 'infromation_schema'

​ 授权之后才能使用,当我们不想让该用户使用数据库的时候,我们也可以收回用户的权限。

​ MySQL数据库提供的权限列表如下:

暂无图片

给用户授予权限

​ 授权语法:

grant 权限列表 on 库.对象名 to '用户名'@'登陆位置' [identified by '密码']-- 说明:
-- 1. 在权限列表处,若有多种权限,使用逗号隔开
grant select on ...
grant select, delete, create on ...
grant all [privileges] on ... -- 表示赋予用户所有权限
-- 2. *.*代表本系统中的所有数据库的所有对象
-- 3. 库.*代表某个数据库中的所有数据对象
-- 4. identified by可选,若用户存在,赋予权限的同时修改密码,若用户不存在,则直接创建用户

​ 案例如下:

在这里插入图片描述

​ 如上所示,当给jzhong用户授予testDB数据库select权限之后,就可以看见该数据库了。

-- jzhong用户下
mysql> use testDB;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
mysql> show tables;
+------------------+
| Tables_in_testDB |
+------------------+
| account          |
+------------------+
1 row in set (0.00 sec)-- 查询表内容
mysql> select * from account;
+----+--------+---------+
| id | name   | blance  |
+----+--------+---------+
|  1 | 张三   |  999.00 |
|  2 | 李四   | 5665.00 |
|  3 | 王五   |  222.00 |
+----+--------+---------+
3 rows in set (0.00 sec)-- 插入元素失败,没有对应的权限
mysql> insert into account values (4, '赵六', 333);
ERROR 1142 (42000): INSERT command denied to user 'jzhong'@'localhost' for table 'account'

​ 注:若发现赋权之后没有生效,执行如下命令:

flush privileges
回收权限

​ 语法如下:

revoke 权限列表 on 库.对象名 from '用户名'@'登陆位置';-- 说明:
-- 1. 在权限列表处,若有多种权限,使用逗号隔开
revoke select on ...
revoke select, delete, create on ...
revoke all [privileges] on ... -- 表示赋予用户所有权限
-- 2. *.*代表本系统中的所有数据库的所有对象
-- 3. 库.*代表某个数据库中的所有数据对象

​ 案例如下:

在这里插入图片描述

​ 如上所示,使用root用户收回jzhong用户对testDB的所有权限,jzhong用户就看不见testDB数据库了。

查看权限

​ 查看对某个用户赋予的权限,语法如下:

show grants for '用户名'@'登陆位置';

​ 如下:

mysql> show grants for 'jzhong'@'localhost';
+-------------------------------------------------------------------+
| Grants for jzhong@localhost                                       |
+-------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'jzhong'@'localhost'                        |
| GRANT SELECT ON `testdb`.* TO 'jzhong'@'localhost'                |
| GRANT ALL PRIVILEGES ON `mysql`.`testdb` TO 'jzhong'@'localhost'  |
| GRANT ALL PRIVILEGES ON `mysql`.`indexdb` TO 'jzhong'@'localhost' |
+-------------------------------------------------------------------+
4 rows in set (0.00 sec)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/59327.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# (定时器、线程)

C# (定时器、线程) TimerDispatcherTimerThread Timer using System; using System.Threading; using System.Threading.Tasks;private static Timer mTimer; // 定时器,10ms执行一次mTimer new Timer(recvTimerCalback, null, 0, 1); …

第11天:Material Design

欢迎来到第11天的Android编程教程!今天我们将深入学习Material Design,这是Google推出的一套设计规范,旨在帮助开发者创建美观且用户友好的应用界面。本节内容将包括Material Design的基本概念、设计原则、常用组件的使用以及主题和样式的自定…

ubuntu24.04安装matlab失败

又是摸鱼摆烂的一天,好难过~ 官方教程:https://ww2.mathworks.cn/help/install/ug/install-products-with-internet-connection.html 问题描述:https://ww2.mathworks.cn/matlabcentral/answers/2158925-cannot-install-matlab-r2…

Hive1.2.1与Hbase1.4.13集成---版本不兼容问题

hive与hbase集成失败,汗流夹背了吧老弟......哈哈哈哈,刷到这篇文章,那你可真是太幸运啦~ 常见错误一: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. org.apache.hadoop.hbase.HTableDescriptor.addFamily(Lorg/apache/hadoop/h…

2024年11月12日Github流行趋势

项目名称:dockur / windows 项目维护者:kroese, renovate, hellodword, luisgmuniz, arisudesu 项目介绍:在Docker容器中运行Windows。 项目star数:25,154 项目fork数:1,826 项目名称:vercel / ai-chatbot…

CPLD概述

1. CPLD简介 CPLD是Complex Programmable Logic Device的简称,是一种较为复杂的PLD逻辑元件。对于可编程逻辑器件的名称,即使是相同名字,不同厂家还可能有自己不同含义。Xilinx公司把由自己发明的基于SRAM工艺和查找表结构,同时需…

项目1:井字棋 --- 《跟着小王学Python》

项目1:井字棋 — 《跟着小王学Python新手》 文章目录 项目1:井字棋 --- 《跟着小王学Python新手》目标功能设计1. 数据结构2. 功能模块3. 用户界面 实现步骤代码实现测试注意事项小结 目标 本技术文章旨在指导读者如何使用 Python 编程语言来实现一个简…

Python 的 Pygame 库,编写简单的 Flappy Bird 游戏

Pygame 是一个用 Python 编写的开源游戏开发框架,专门用于编写 2D 游戏。它提供了丰富的工具和功能,使得开发者能够快速实现游戏中的图形渲染、声音播放、输入处理和动画效果等功能。Pygame 非常适合初学者和想要快速创建游戏原型的开发者。 Pygame 的主…

LeetCode-222.完全二叉树的节点个数

. - 力扣(LeetCode) 给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。 完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一…

两数组根据数组中每条数据对象中的某个值合并去重

假设有两个数组:arr1 和 arr2,并且每个数组中的元素是对象,你希望根据对象中的某个属性(比如 id),判断 arr2 中是否已经存在具有相同 id 值的对象。如果没有重复,就将 arr1 中的该对象新增到 ar…

16008.行为树(五)-自定义数据指针在黑板中的传递

文章目录 1.1 背景1.2 xml文件定义1.3 代码实现1.3 执行结果1.1 背景 自定义数据结构指针,通过黑板的形式,在树的节点中进行指针的传递。 1.2 xml文件定义 xhome@ubuntu:~/opt/groot_pro$ cat unit_t1.xml<?xml version="1.0" encoding="UTF-8"?&…

【MongoDB】MongoDB的核心-索引原理及索引优化、及查询聚合优化实战案例(超详细)

文章目录 一、数据库查询效率问题引出索引需求二、索引的基本原理及作用&#xff08;一&#xff09;索引的创建及数据组织&#xff08;二&#xff09;不同类型的索引&#xff08;三&#xff09;索引的额外属性 三、索引的优化与查询计划分析&#xff08;一&#xff09;通过prof…

企业如何实现无缝数据中心进行大数据迁移呢?

数据中心迁移是企业面临的一个复杂而关键的挑战&#xff0c;涉及到大量的数据移动和系统的重新部署。随着业务的扩展和技术的进步&#xff0c;企业可能需要将数据中心迁移到新的位置或升级到更先进的设备。在进行数据迁移时&#xff0c;必须精心规划和执行&#xff0c;以确保数…

FOFA使用教程之从零到精通

FOFA使用教程之从零到精通 前言一、关于网络资产测绘的概念1、啥是网络空间资产测绘2、啥是互联网资产二、FOFA的简要介绍1、FOFA地址是啥?2、关于FOFA的简要介绍三、FOFA精讲1、运算符规则详解① 关于 = 号的使用说明② 关于 == 号的使用说明③ 关于 && 号的使用说明…

初始JavaEE篇 —— 网络编程(2):了解套接字,从0到1实现回显服务器

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a;JavaEE 目录 TCP 与 UDP Socket套接字 UDP TCP 网络基础知识 在一篇文章中&#xff0c;我们了解了基础的网络知识&#xff0c;网络的出…

【人工智能】10分钟解读-深入浅出大语言模型(LLM)——从ChatGPT到未来AI的演进

文章目录 一、前言二、GPT模型的发展历程2.1 自然语言处理的局限2.2 机器学习的崛起2.3 深度学习的兴起2.3.1 神经网络的训练2.3.2 神经网络面临的挑战 2.4 Transformer的革命性突破2.4.1 Transformer的核心组成2.4.2 Transformer的优势 2.5 GPT模型的诞生与发展2.5.1 GPT的核心…

Webpack 中无法解析别名路径的原因及解决方案

Webpack 中无法解析别名路径的原因及解决方案 文章目录 Webpack 中无法解析别名路径的原因及解决方案1. 引言2. 理解别名路径&#xff08;Alias&#xff09;2.1 什么是别名路径&#xff1f;2.2 别名路径的优势 3. 如何在Webpack中配置别名路径3.1 基本配置3.2 使用别名路径 4. …

最全最简单理解迭代器

1. 迭代器的基础概念(iterator) 1.1 本质 迭代器能够用来遍历容器的对象,与能够遍历数组的指针类似,是广义指针。 1.2 作用: 能够让迭代器与算法不干扰的相互发展,最后又能无间隙的粘合起来。重载了*,++,==,!=,=运算符。用以操作复杂的数据结构。容器提供迭代…

MTSET可溶于DMSO、DMF、THF等有机溶剂,并在水中有轻微的溶解性,91774-25-3

一、基本信息 中文名称&#xff1a;[2-(三甲基铵)乙基]甲硫基磺酸溴&#xff1b;MTSET巯基反应染料 英文名称&#xff1a;MTSET&#xff1b;[2-(Trimethylammonium)ethyl]methanethiosulfonate Bromide CAS号&#xff1a;91774-25-3 分子式&#xff1a;C6H16BrNO2S2 分子量…

CC1链学习记录

&#x1f338; 前言 上篇文章学习记录了URLDNS链&#xff0c;接下来学习一下Common-Colections利用链。 &#x1f338; 相关介绍 Common-Colections是Apache软件基金会的项目&#xff0c;对Java标准的Collections API提供了很好的补充&#xff0c;在其基础上对常用的数据结构…