Day 27 MySQL的权限管理

权限管理

grant权限管理

向用户开放全局,某个库及库内的表,特定的某个库内的某个表的权限时,使用grant

格式

grant 权限 on 库.表 to ‘用户’@‘允许登录的主机’ identified by ‘密码’;

实例

  • grant all (privileges) on . to ‘root’@‘%’ identified by ‘123’;

    向root用户开放所有库的所有表的所有权限,并允许使用所有主机登录

  • grant select on school.* to school@‘192.168.98.12’ identified by ‘123’;

    向school用户开放school库以及该库内所有的表的查看的权限,只允许192.168.98.12主机登录

  • grant select,insert on school.xueke to xueke@‘192.168.98.%’ identified by ‘123’;

    向xueke用户开放school下的xueke表查看,增加权限,只允许192.168.98.0/24网段内的主机登录

注意

  1. 在使用grant进行授权时,如果授权的用户不存在,将会同时创建该用户

  2. 库.表 :*.*表示所有库的所有表

  3. 权限种类:所有权限all (privileges);增insert;删drop;删delete;改alter;查select…

    使用all privileges时,privileges可以省略

  4. insert,drop,delete,alter,select等权限可以在同一条授权语句中使用逗号隔开同时授权给同一个用户

  5. 用grant给普通用户所有权限(all privileges)时,并不会给普通用户授权权限(Grant_priv)

  6. 完成授权后,需要使用 flush privileges ,使授权生效

  7. 所有的用户创建后都会在全局授权表(mysql.user)中留下记录,其次会在对应授权等级的授权表中留下记录

  8. 允许登录的主机

    localhost:仅允许本机(本地)登录,root用户默认为localhost,仅允许从本地登录

    %:允许所有的主机登录

    192.168.98.12:仅允许192.168.98.12登录

    192.168.98.%:仅允许192.168.98.0/24网段内的主机登录

insert权限管理

向用户开放特定的某个库内的某个表的某个字段的权限时,使用insert

格式

insert into mysql.columns_priv(host,user,db,table_name,column_name,column_priv) values(‘允许登录主机’,‘用户名’,‘库名’,‘表名’,‘字段名’,‘权限’);

权限级别

​ Global level:系统级,所有库,所有表的权限,对应权限表 mysql.user

​ Database level:某个数据库中的所有表的权限,对应权限表 mysql.db

​ Table level:库中的某个表的权限,对应权限表 mysql.tables_priv

​ Column level:表中的某个字段的权限,对应权限表 mysql.columns_priv

​ procs level:某个存储过程的权限

​ proxies level:代理服务器的权限

查看权限记录表

​ 因为超级管理员默认已经设置;所以直接查询权限即可

Global level

 mysql> select * from mysql.user\G
*************************** 1. row ***************************Host: localhostUser: rootSelect_priv: YInsert_priv: YUpdate_priv: YDelete_priv: YCreate_priv: YDrop_priv: YReload_priv: YShutdown_priv: YProcess_priv: YFile_priv: YGrant_priv: YReferences_priv: YIndex_priv: YAlter_priv: YShow_db_priv: YSuper_priv: YCreate_tmp_table_priv: YLock_tables_priv: YExecute_priv: YRepl_slave_priv: YRepl_client_priv: YCreate_view_priv: YShow_view_priv: YCreate_routine_priv: YAlter_routine_priv: YCreate_user_priv: YEvent_priv: YTrigger_priv: Y
Create_tablespace_priv: Yssl_type: ssl_cipher: x509_issuer: x509_subject: max_questions: 0max_updates: 0max_connections: 0max_user_connections: 0plugin: mysql_native_passwordauthentication_string: *B1DD4ADE47888D9AEC4D705C85230F1B52D2A817password_expired: Npassword_last_changed: 2022-09-25 14:44:38password_lifetime: NULLaccount_locked: N

字段介绍:

用户字段:root
权限字段:Select_priv
安全字段:*B1DD4ADE47888D9AEC4D705C85230F1B52D2A817Select_priv:查询权限
Insert_priv:插入权限
Update_priv:更新权限
Delete_priv:删除权限
......

Database level

mysql> select * from mysql.db\G;
*************************** 1. row ***************************Host: localhostDb: performance_schemaUser: mysql.sessionSelect_priv: YInsert_priv: NUpdate_priv: NDelete_priv: NCreate_priv: NDrop_priv: NGrant_priv: NReferences_priv: NIndex_priv: NAlter_priv: N
Create_tmp_table_priv: NLock_tables_priv: NCreate_view_priv: NShow_view_priv: NCreate_routine_priv: NAlter_routine_priv: NExecute_priv: NEvent_priv: NTrigger_priv: N

测试库权限:

mysql> create database t1;
Query OK, 1 row affected (0.00 sec)mysql> grant all on t1.* to 't1'@'localhost' identified by 'QianFeng@123';
Query OK, 0 rows affected, 1 warning (0.00 sec)

查看:

mysql> select * from mysql.db\G
*************************** 3. row ***************************Host: localhostDb: t1User: t1Select_priv: YInsert_priv: YUpdate_priv: YDelete_priv: YCreate_priv: YDrop_priv: YGrant_priv: NReferences_priv: YIndex_priv: YAlter_priv: Y
Create_tmp_table_priv: YLock_tables_priv: YCreate_view_priv: YShow_view_priv: YCreate_routine_priv: YAlter_routine_priv: YExecute_priv: YEvent_priv: YTrigger_priv: Y
3 rows in set (0.00 sec)

验证:

[root@xingdian ~]# mysql -u t1 -pQianFeng@123
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.39-log MySQL Community Server (GPL)Copyright (c) 2000, 2022, Oracle and/or its affiliates.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> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| t1                 |
+--------------------+
2 rows in set (0.00 sec)

Table level

mysql> select * from mysql.tables_priv\G;
*************************** 1. row ***************************Host: localhostDb: mysqlUser: mysql.sessionTable_name: userGrantor: boot@connecting hostTimestamp: 0000-00-00 00:00:00Table_priv: Select
Column_priv: 
*************************** 2. row ***************************Host: localhostDb: sysUser: mysql.sysTable_name: sys_configGrantor: root@localhostTimestamp: 2022-09-25 14:40:58Table_priv: Select
Column_priv: 
2 rows in set (0.00 sec)

创建库表验证:

mysql> create database t2;
Query OK, 1 row affected (0.00 sec)mysql> use t2;
Database changed
mysql> create table u1(id int);
Query OK, 0 rows affected (0.01 sec)mysql> insert into u1 values (1);
Query OK, 1 row affected (0.01 sec)mysql> grant all on t2.u1 to 't2'@'localhost' identified by 'QianFeng@123';
Query OK, 0 rows affected, 1 warning (0.00 sec)mysql> create table u2(id int);
Query OK, 0 rows affected (0.01 sec)mysql> show tables;
+--------------+
| Tables_in_t2 |
+--------------+
| u1           |
| u2           |
+--------------+
2 rows in set (0.00 sec)

权限查看:

mysql> select * from mysql.tables_priv\G;
*************************** 3. row ***************************Host: localhostDb: t2User: t2Table_name: u1Grantor: root@localhostTimestamp: 0000-00-00 00:00:00Table_priv: Select,Insert,Update,Delete,Create,Drop,References,Index,Alter,Create View,Show view,Trigger
Column_priv: 
3 rows in set (0.00 sec)

验证:(登录t2账户,看到u1表,看不到u2代表权限成功)

[root@xingdian ~]# mysql -u t2 -pQianFeng@123
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.7.39-log MySQL Community Server (GPL)Copyright (c) 2000, 2022, Oracle and/or its affiliates.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> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| t2                 |
+--------------------+
2 rows in set (0.00 sec)mysql> use t2;
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_t2 |
+--------------+
| u1           |
+--------------+
1 row in set (0.00 sec)

Column level

[root@xingdian ~]# mysql -uroot -pQianFeng@123
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.7.39-log MySQL Community Server (GPL)Copyright (c) 2000, 2022, Oracle and/or its affiliates.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> select * from mysql.columns_priv\G; 
Empty set (0.00 sec)mysql> insert into mysql.columns_priv(host,db,user,table_name,column_name,column_priv) values('%','t2','t2','u1','id','select');  
Query OK, 1 row affected (0.00 sec)mysql> select * from mysql.columns_priv\G;
*************************** 1. row ***************************Host: %Db: t2User: t2Table_name: u1
Column_name: idTimestamp: 2022-09-25 15:34:05
Column_priv: Select
1 row in set (0.00 sec)

注意:

​ 前提是有库,有表,有权限

用户管理

登录和退出

 mysql -h 192.168.18.160 -P 30042 -u root -pmysql -e "show databases;"mysql -h 192.168.18.160 -P 30042 -u root -pmysql mysql -e "show tables;"-h	指定主机名                       【默认为localhost】-P	MySQL服务器端口                  【默认3306】-u	指定用户名                       【默认root】-p	指定登录密码                     【默认为空密码】此处mysql为指定登录的数据库 -e	接SQL语句  (在脚本中使用)

创建用户

方式一:

使用此种方法创建普通用户,若不指定登录主机,默认所有主机均可登录(%)

mysql> create user user01;
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
注意:该报错是因为密码强度问题,取消密码强度即可创建用户mysql> create user 'user01'@'%' identified by '123';
Query OK, 0 rows affected (0.00 sec)

方式二:

mysql> grant all on *.* to 'user01'@'localhost' identified by '123';
Query OK, 0 rows affected, 1 warning (0.00 sec)

删除用户

方式一:

MySQL [(none)]> Drop user user01@'%';
Query OK, 0 rows affected (0.00 sec)

方法二:

MySQL [(none)]> delete from mysql.user where user='user01' AND Host='%';
Query OK, 1 row affected (0.00 sec)

修改密码

方式一:

[root@xingdian ~]# mysqladmin -uroot -p'123' password 'new_password'	    
//123为旧密码

方式二:

如果普通用户拥有足够的权限,可以通过该方式修改root用户的密码

MySQL [(none)]> update mysql.user set authentication_string=password(123456) where user='user01' And Host='%';

注意:

​ 刷新授权表后生效:flush privileges

自己设置自己密码:

MySQL [(none)]> set password='123';
Query OK, 0 rows affected (0.00 sec)

root用户修改其他用户密码:

方法一:

mysql> SET PASSWORD FOR user3@'localhost'='new_password';

方法二:

UPDATE mysql.user SET authentication_string=password('new_password') WHERE user='user01' AND host='localhost';

查看密码策略

mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password_check_user_name    | OFF    |
| validate_password_dictionary_file    |        |
| validate_password_length             | 8      |
| validate_password_mixed_case_count   | 1      |
| validate_password_number_count       | 1      |
| validate_password_policy             | MEDIUM |
| validate_password_special_char_count | 1      |
+--------------------------------------+--------+
7 rows in set (0.00 sec)

参数解释:

​ validate_password_dictionary_file 指定密码验证的文件路径

​ validate_password_length 密码最小长度

​ validate_password_mixed_case_count 密码至少要包含的小写字母个数和大写字母个数

​ validate_password_number_count 密码至少要包含的数字个数

​ validate_password_policy 密码强度检查等级,对应等级为:0/LOW、1/MEDIUM、2/STRONG,默认为1

​ 0/LOW:只检查长度

​ 1/MEDIUM:检查长度、数字、大小写、特殊字符

​ 2/STRONG:检查长度、数字、大小写、特殊字符字典文件

​ validate_password_special_char_count密码至少要包含的特殊字符数

修改密码策略:

mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password_check_user_name    | OFF    |
| validate_password_dictionary_file    |        |
| validate_password_length             | 8      |
| validate_password_mixed_case_count   | 1      |
| validate_password_number_count       | 1      |
| validate_password_policy             | MEDIUM |
| validate_password_special_char_count | 1      |
+--------------------------------------+--------+
7 rows in set (0.00 sec)mysql> set global validate_password_length=4;
Query OK, 0 rows affected (0.00 sec)mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name                        | Value  |
+--------------------------------------+--------+
| validate_password_check_user_name    | OFF    |
| validate_password_dictionary_file    |        |
| validate_password_length             | 4      |
| validate_password_mixed_case_count   | 1      |
| validate_password_number_count       | 1      |
| validate_password_policy             | MEDIUM |
| validate_password_special_char_count | 1      |
+--------------------------------------+--------+
7 rows in set (0.00 sec)

关闭密码策略:

修改配置文件/etc/my.cnf,添加以下参数:
validate_password=off

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

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

相关文章

AIGC相关的编程题目【初级题目】1. 文本生成器 2. 图像标签生成

1. 文本生成器 编写一个程序,使用预先训练的语言模型(如GPT-2或GPT-3)来生成文本。用户输入一个单词或短语作为提示,程序输出一段继续该提示的文本。 import torch from transformers import GPT2LMHeadModel, GPT2Tokenizer# 加…

CTK库编译-01

地址 官网地址:Commontk github地址:https://github.com/commontk/CTK 编译环境 Qt套件: IDE:VS2022 使用vs2022 文件->打开->cmake 修改根目录下的CMakeLists.txt 默认只编译core模块,所以需要把部分模块…

一文读懂Python的`__init__`,`__init__`方法的终极指南

大家好,今天给大家介绍一个Python中一个特殊的函数__init__。 在Python中,__init__方法是一个特殊的函数,它在创建类的新实例时自动调用。它的作用类似于其他编程语言中的构造函数,用于初始化对象的状态。这篇文章将带你深入了解…

资料总结分享:SAM,bam,bed文件格式

目录 sam文件 bam文件 bed 文件 sam文件 SAM(Sequence Alignment/Map)文件是存储测序数据比对结果的一种常见格式。SAM文件通常用于存储DNA或RNA测序数据在参考基因组上的比对结果。 SAM文件由多行文本组成,每一行代表一个比对结果。SAM文…

QX-mini51学习---(2)点亮LED

目录 1什么是ed 2led工作参数 3本节相关原理图分析 4本节相关c 5实践 1什么是ed 半导体发光二极管,将电能转化为光能,耗电低,寿命长,抗震动 长正短负,贴片是绿点处是负极 2led工作参数 3本节相关原理图分析 当…

Python使用with语句管理文件上下文

使用 with 语句管理文件上下文是 Python 中一种常见的文件操作方式,它能够自动管理文件的打开和关闭,使得文件操作更加简洁、安全和可靠。本文将详细介绍如何使用 with 语句管理文件上下文,包括语法、用法、优势以及示例等内容。 一、with 语…

Slurm运行pytorch深度学习模型(小白版)

Slurm背景: Slurm 是一种开源的作业调度系统,它用于管理大型计算集群中的计算资源和作业。你可以把它想象成一个“交通管制员”,负责管理计算集群中的各种任务,确保它们按照用户设定的规则有序地执行。 Slurm 的主要功能包括&…

计算图:深度学习中的链式求导与反向传播引擎

在深度学习的世界中,计算图扮演着至关重要的角色。它不仅是数学计算的图形化表示,更是链式求导与反向传播算法的核心。本文将深入探讨计算图的基本概念、与链式求导的紧密关系及其在反向传播中的应用,旨在为读者提供一个全面而深入的理解。 计…

并发与线程、进程基本概念

目录 并发 可执行程序 进程与线程 进程 线程 线程与进程局别 并发的实现 多进程并发 多线程并发 并发 并发字面上就是多个相对独立的事件一起发生。代表了在同一时间内处理多个任务或进程的能力。我们日常生活中有很多并发例子,如一边看电影一边吃零食&…

嵌入式5-7

练习:优化登录框,输入完用户名和密码后,点击登录,判断账户是否为 Admin 密码 为123456,如果判断成功,则输出登录成功,并关闭整个登录界面,如果登录失败,则提示登录失败&a…

JavaScript异步编程——03-Ajax传输json和XML

Ajax 传输 JSON JSON 的语法 JSON(JavaScript Object Notation):是 ECMAScript 的子集。作用是进行数据的交换。语法更为简洁,网络传输、机器解析都更为迅速。 语法规则: 数据在键值对中 数据由逗号分隔 花括号保存对象 方括号保存数组…

远程桌面连接不上,远程桌面连接不上的专业解决策略

在信息技术领域,远程桌面连接是一种非常重要的工具,它允许用户从任何地点、任何时间访问和操作远程计算机。然而,当远程桌面连接出现问题时,可能会严重影响工作效率。以下是一些可能导致远程桌面连接不上的原因以及相应的解决方案…

Verilog刷题笔记47

题目: From a 1000 Hz clock, derive a 1 Hz signal, called OneHertz, that could be used to drive an Enable signal for a set of hour/minute/second counters to create a digital wall clock. Since we want the clock to count once per second, the OneHer…

普洱茶泡多少茶叶才算淡茶?

普洱茶淡茶一般放几克茶叶,品深茶官网根据多年专业研究与实践结果,制定了淡茶冲泡标准。在冲泡普洱茶淡茶时,茶叶的投放量是关键因素之一。淡茶冲泡标准旨在保持茶汤的清爽口感,同时充分展现普洱茶的独特风味。 根据《品深淡茶冲…

AMEYA360详解:蔡司利用纳米探针技术探索半导体微观电学性能

半导体器件尺寸不断缩小和复杂度增加,纳米探针(Nanoprobing)技术成为解决微观电学问题和优化器件性能的重要工具,成为半导体失效分析流程中越来越重要的一环。 随着功率半导体的快速发展,其厂商也开始密切关注纳米探针技术在PN结特性分析和掺…

下载后端返回的二进制文件

目录 一、问题 二、解决方法 三、总结 tiips:如嫌繁琐,直接移步总结即可! 一、问题 1.需要导出功能,后端已经返回了二进制文件,前端如何下载呢? 二、解决方法 1.数据类型转换:将后端的二进制数据转换…

LeetCode题练习与总结:合并两个有序数组--88

一、题目描述 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。 注意:最终&#xf…

js宏任务微任务输出解析

第一种情况 setTimeout(function () {console.log(setTimeout 1) //11 宏任务new Promise(function (resolve) {console.log(promise 1) //12 同步函数resolve()}).then(function () {console.log(promise then) //13 微任务})})async function async1() {console.log(async1 s…

贪吃蛇大作战(C语言--实战项目)

朋友们!好久不见。经过一段时间的沉淀,我这篇文章来和大家分享贪吃蛇大作战这个游戏是怎么实现的。 (一).贪吃蛇背景了解及效果展示 首先相信贪吃蛇游戏绝对称的上是我们00后的童年,不仅是贪吃蛇还有俄罗斯⽅块&…

持续总结中!2024年面试必问 100 道 Java基础面试题(三十四)

上一篇地址:持续总结中!2024年面试必问 100 道 Java基础面试题(三十三)-CSDN博客 六十七、抽象类是否可以实现接口? 抽象类可以实现接口(Interface)。在Java中,抽象类实现接口是一…