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

news/2024/11/8 21:38:46 标签: 数据库, mysql

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

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

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

文章目录

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

用户管理

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

在这里插入图片描述

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

用户信息

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

在这里插入图片描述

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

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

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

mysql">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)
创建用户

​ 语法:

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

​ 案例如下:

mysql">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地址暴露在公网上!!!这是一种很危险的行为。

删除用户

​ 删除用户语法:

mysql">drop user '用户名'@'主机名'

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

​ 案例如下:

mysql">-- 查询当前系统中有哪些用户
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)
修改用户密码

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

mysql">-- 修改自己的密码
set password = password('新的密码');

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

​ 案例如下:

mysql">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的用户
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数据库提供的权限列表如下:

暂无图片

给用户授予权限

​ 授权语法:

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权限之后,就可以看见该数据库了。

mysql">-- 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 -A

Database 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'

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

mysql">flush privileges
回收权限

​ 语法如下:

mysql">revoke 权限列表 on 库.对象名 from '用户名'@'登陆位置';

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

​ 案例如下:

在这里插入图片描述

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

查看权限

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

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

​ 如下:

mysql">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.niftyadmin.cn/n/5744465.html

相关文章

搭建企业私有云 只需一台设备 融合计算、存储与K8s

Infortrend老牌存储厂商推出 KS 企业私有云产品,将计算节点、存储与Kubernetes整合在一套系统中,为企业提供高效稳定的专属本地私有云平台。 KS 同时内置 Kubernetes 平台和虚拟机管理程序,既能运行云原生容器化应用程序,例如大数…

Docker安装部署单机版高斯数据库gaussdb

opengauss官网:https://opengauss.org/ opengauss镜像:https://hub.docker.com/r/enmotech/opengauss 一:镜像拉取并运行 如果出现镜像无法拉取的情况,请先在本地,开启VPN访问外网,拉取镜像,再…

vscode远程连接+免密登录

一、远程连接 本地主机(win): 1. 安装vscode 2. 安装插件Remote-ssh 离线安装 VSCode 插件的步骤如下: ### 1. 下载插件 在无法联网的环境中,首先你需要在有网络的环境下下载所需的插件。 #### 下载步骤: 1. 打开 [VSCode 插件市场](ht…

C++ 二分法

二分法(Binary Search)是一种常用的查找算法,它通过将已排序的元素划分为两部分,然后通过比较目标值与划分点的大小关系,将查找范围缩小一半,从而快速地找到目标值。二分法的时间复杂度为O(logN)&#xff0…

精华 springBoot快速上手

快速搭建springboot项目 项目包结构 SpringBoot_Project src //java程序源代码 main entity //实体类 mapper //mapper映射类接口 service //service层接口和实现类 controller //controller层接口 resources //资源文件夹 mappers //mapper映射文件 public //存放.html等网页…

Java SPI机制简单讲解

前言 在Java开发中,经常会遇到需要扩展系统功能的需求。为了使系统更加灵活和可扩展,Java提供了SPI(Service Provider Interface)机制。本文将简单介绍SPI机制的基本概念、工作原理,并通过一个具体的示例来展示如何使…

Nginx配置文件详解及常用功能配置、应用场景

一、Nginx配置文件结构 Nginx的配置文件通常命名为nginx.conf,其结构清晰,遵循简单的层次化设计,主要分为以下几个部分: 全局块: user:指定Nginx工作进程运行的用户和用户组。 worker_processes&#xf…

SCI期刊文章录用后,期刊被on hold了怎么办?

主要有以下两种选择: 递一,如果时间紧张,可以撤稿重投。比如说等着文章发表了好去申请项目、毕业啥的,那可得好好考虑下撤稿重投这条路哦。为啥呢? 因为 on hold 期间,数据库是会暂停检索该期刊新发表的文…