mysql 用户管理-权限管理
学习了用户管理,再学习下权限管理。
3,权限管理
权限管理主要是对登录到MySQL的用户进行权限验证。所有用户的权限都存储在MySQL的权限表中,不合理的权限规划会给MySQL服务器带来安全隐患。数据库管理员要对所有用户的权限进行合理规划管理.MySQL权限系统的主要功能是证实连接到一台给定主机的用户,并且赋予该用户在数据库上的SELECT、INSERT、UPDATE和 DELETE 权限。
1,MySQL的各种权限
账户权限信息被存储在MySQL数据库的 user、db、host、tables_priv、columns_priv和procs_priv表中。在 MySQL启动时,服务器将这些数据库表中权限信息的内容读入内存。
GRANT和REVOKE语句所涉及的权限的名称如表7所示,还有在授权表中每个权限的表列名称和每个权限有关的操作对象等。
表7GRANT和REVOKE语句中可以使用的权限
权限 | user表中对应的列 | 权限的范围 |
CREATE | Create_priv | 数据库、表或索引 |
DROP | Drop_priv | 数据库、表或视图 |
GRANT OPTION | Grant_priv | 数据库、表或存储过程 |
REFERENCES | References_priv | 数据库或表 |
EVENT | Event_priv | 数据库 |
ALTER | Alter_priv | 数据库 |
DELETE | Delete_priv | 表 |
INDEX | Index_priv | 表 |
INSERT | Insert_priv | 表 |
SELECT | Select_priv | 表或列 |
UPDATE | Update_priv | 表或列 |
CREATE TEMPORARY TABLES | Create_tmp_table_priv | 表 |
LOCK TABLES | Lock_tables_priv | 表 |
TRIGGER | Trigger_priv | 表 |
CREATE VIEW | Create_view_priv | 视图 |
SHOW VIEW | Show_view_priv | 视图 |
ALTER ROUTINE | Alter_routine_priv | 存储过程和函数 |
CREATE ROUTINE | Create_routine_priv | 存储过程和函数 |
EXECUTE | Execute_priv | 存储过程和函数 |
FILE | File_priv | 访问服务器上的文件 |
CREATE TABLESPACE | Create_tablespace_priv | 服务器管理 |
CREATE USER | Create_user_priv | 服务器管理 |
PROCESS | Process_priv | 存储过程和函数 |
RELOAD | Reload_priv | 访问服务器上的文件 |
REPLICATION CLIENT | Repl_client_priv | 服务器管理 |
REPLICATION SLAVE | Repl_slave_priv | 服务器管理 |
SHOW DATABASES | Show_db_priv | 服务器管理 |
SHUTDOWN | Shutdown_priv | 服务器管理 |
SUPER | Super_priv | 服务器管理 |
(1)CREATE和 DROP权限,可以创建新数据库和表,或删除(移掉)已有数据库和表。如果将MySQL数据库中的DROP权限授予某用户,用户可以删掉 MySQL访问权限保存的数据库。
(2)SELECT、INSERT、UPDATE和 DELETE 权限允许在一个数据库现有的表上实施操作。
(3)SELECT权限只有在它们真正从一个表中检索行时才被用到。
(4)INDEX权限允许创建或删除索引,INDEX适用已有表。如果具有某个表的CREATE权限,可以在CREATE TABLE语句中包括索引定义。
(5)ALTER权限,可以使用ALTER TABLE来更改表的结构和重新命名表。
(6)CREATE ROUTINE权限来创建保存的程序(函数和程序),ALTER ROUTINE权限用来更改和删除保存的程序,EXECUTE权限用来执行保存的程序。
(7)GRANT权限允许授权给其他用户。可用于数据库、表和保存的程序。
(8)FILE权限给予用户使用LOAD DATA INFILE和SELECT ... INTO OUTFILE语句读或写服务器上的文件,任何被授予FILE权限的用户都能读或写MySQL 服务器上的任何文件。(说明用户可以读任何数据库目录下的文件,因为服务器可以访问这些文件)。FILE 权限允许用户在 MySQL服务器具有写权限的目录下创建新文件,但不能覆盖已有文件。
其余的权限用于管理性操作,它使用MySQLadmin程序或SQL语句实施。表8显示每个权限允许执行的MySQLadmin命令。
表8 不同权限下可以使用的 MySQLadmin命令
权限 | 权限拥有者允许执行的命令 |
RELOAD | flush-hosts, flush-logs, flush-privileges, flush-status, flush-tables, flush-threads, refresh, reload |
SHUTDOWN | shutdown |
PROCESS | processlist |
SUPER | kill |
(1)reload命令告诉服务器将授权表重新读入内存:flush-privileges是 reload的同义词;refresh命令清空所有表并关闭/打开记录文件;其他flush-xxx 命令执行类似refresh的功能,但是范围更有限,并且在某些情况下可能更好用。例如,如果只是想清空记录文件,flush-logs是比 refresh更好的选择。
(2)shutdown命令关掉服务器。只能从 MySQLadmin发出命令。
(3)processlist命令显示在服务器内执行的线程的信息(即其他账户相关的客户端执行的语句)。kill 命令杀死服务器线程。用户总是能显示或杀死自己的线程,但是需要 PROCESS权限来显示或杀死其他用户和SUPER权限启动的线程。
(4)kill命令能用来终止其他用户或更改服务器的操作方式。总的来说,只授予权限给需要他们的那些用户。
2,授权
授权就是为某个用户授予权限。合理的授权可以保证数据库的安全。MySQL中可以使用GRANT语句为用户授予权限。
授予的权限可以分为多个层级:
1,全局层级
全局权限适用于一个给定服务器中的所有数据库。这些权限存储在 MySQL.user 表中。GRANT ALL ON *.*和REVOKE ALL ON*.*只授予和撤销全局权限。
2,数据库层级
数据库权限适用于一个给定数据库中的所有目标。这些权限存储在 MySQL.db和MySQL.host表中。GRANT ALL ON db_name.和REVOKE ALL ON db_name.*只授予和撤销数据库权限。
3,表层级
表权限适用于一个给定表中的所有列。这些权限存储在 MySQL.talbes_priv表中。GRANTALL ON db_name.tbl_name和 REVOKE ALL ON db_name.tbl_name 只授予和撤销表权限。
4,列层级
列权限适用于一个给定表中的单一列。这些权限存储在MySQL.columns_priv表中。当使用REVOKE时,必须指定与被授权列相同的列。
5,子程序层级
CREATE ROUTINE、ALTER ROUTINE、EXECUTE 和 GRANT权限适用于已存储的子程序。这些权限可以被授予为全局层级和数据库层级。而且,除了CREATE ROUTINE外,这些权限可以被授予子程序层级,并存储在MySQL.procs_priv表中。
在 MySQL中,必须是拥有GRANT权限的用户才可以执行GRANT语句。
要使用GRANT或REVOKE,必须拥有GRANT OPTION权限,并且必须用于正在授予或撤销的权限。GRANT的语法如下:
GRANT priv_type [(columns)] [. priv_type [(columns)]] ...
ON [object_type] tablel, table2,., tablen
To user [IDENTIEIED BY [PASSWORD] 'password']
[,user [IDENTIFIED BY [PASSWORD] 'password']] ...[WITH GRANT OPTION]
object_type = TABLE | FUNCTION | PROCEDURE
其中,priv_type参数表示权限类型; columns 参数表示权限作用于哪些列上,不指定该参数,表示作用于整个表;table1,table2,... .tablen表示授予权限的列所在的表; object_type指定授权作用的对象类型包括TABLE(表)、FUNCTION(函数)和PROCEDURE(存储过程),当从旧版本的MySQL升级时,要使用object_tpye子句,必须升级授权表;user参数表示用户账户,由用户名和主机名构成,形式是“'username'@"hostname'”;IDENTIFIED BY参数用于设置密码。
WITH关键字后可以跟一个或多个GRANT OPTION。GRANT OPTION的取值有5个,
意义如下:
(1)GRANT OPTION:被授权的用户可以将这些权限赋予别的用户。
(2)MAX_QUERIES_PER_HOUR count:设置每个小时可以执行count次查询。
(3)MAX_UPDATES_PER_HOUR count:设置每小时可以执行count次更新。
(4)MAX_CONNECTIONS_PER_HOUR count:设置每小时可以建立count个连接。
(5)MAX_USER_CONNECTIONS count:设置单个用户可以同时建立count个连接。
【例15】使用GRANT 语句创建一个新的用户 grantUser,密码为“grantpwd”。用户grantUser对所有的数据有查询、插入权限,并授于GRANT权限。GRANT语句及其执行结果如下:
GRANT SELECT, INSERT ON *.* TO 'grantUser'@'localhost'
IDENTIFIED BY 'grantpwd'
WITH GRANT OPTION;
结果显示执行成功,使用SELECT语句查询用户testUser2的权限:
SELECT Host, User, Select_priv, Insert_priv, Grant_priv
FROM mysql.user where user = 'grantUser';
查询结果显示用户test User2被创建成功,并被赋予SELECT、INSERT 和 GRANT权限,其相应字段值均为‘Y’。
被授予GRANT 权限的用户可以登录MySQL并创建其他用户账户,在这里为名称是grantUser的用户。读者可以使用grantUser登录,并按照【例4】中的过程创建并授权其他账户。
3,收回权限
收回权限就是取消已经赋予用户的某些权限。收回用户不必要的权限可以在一定程度上保证系统的安全性。MySQL中使用REVOKE 语句取消用户的某些权限。使用REVOKE收回权限之后,用户账户的记录将从db、host、tables_priv和 columns_priv表中删除,但是用户账号记录仍然在.user 表中保存(删除user表中的账户记录,使用DROP USER语句)。
在将用户账户从user 表删除之前,应该收回相应用户的所有权限,REVOKE语句有两种语法格式,第一种语法是收回所有用户的所有权限,此语法用于取消对于已命名的用户的所有全局层级、数据库层级、表层级和列层级的权限,其语法如下:
REVOKE ALL PRIVILEGES, GRANT OPTION
FROM 'user'@'host" [,'user'@'host' ...]
REVOKE语句必须和FROM语句一起使用,FROM语句指明需要收回权限的账户。另一种为长格式的REVOKE语句,基本语法如下:
REVOKE priv_type [(columns)] [,priv_type [(eolumns)]] ...
ON tablel, table2, .., tablen
FROM 'user'@'host'[,'user'@'host' ...]
该语法收回指定的权限。其中,priv_type参数表示权限类型; columns参数表示权限作用于哪些列上,如果不指定该参数,表示作用于整个表; table1,table2....tablen表示从哪个表中收回权限;"user@"host'参数表示用户账户,由用户名和主机名构成。
要使用REVOKE语句,必须拥有MySQL数据库的全局CREATE USER权限或UPDATE权限。
【例16】使用REVOKE语句取消用户 testUser的更新权限。REVOKE语句及其执行结果如下:
REVOKE UPDATE ON *.* FROM 'testUser'@'localhost';
执行结果显示执行成功,使用SELECT语句查询用户test 的权限:
SELECT Host, User, Select_priv Update_priv, Grant_privFROM MySQL.user where user = 'testUser';
查询结果显示用户testUser的 Update_priv字段值为“N”,UPDATE权限已经被收回。
当从旧版本的MySQL升级时,如果要使用EXECUTE、CREATE VIEW、SHOW VIEW.、CREATE USER、CREATE ROUTINE 和ALTER ROUTINE 权限,必须首先升级授权表。
4,查看权限
SHOW GRANTS语句可以显示指定用户的权限信息,使用SHOW GRANTS查看账户信息的基本语法格式如下:
SHOW GRANTS FOR 'user'@ 'host';
其中,user 表示登录用户的名称,host表示登录的主机名称或者IP地址。在使用该语句时,要确保指定的用户名和主机名都要用单引号括起来,并使用‘@’符号,将两个名字分隔开。
【例17】使用SHOW GRANTS 语句查询用户testUser 的权限信息。SHOW GRANTS语句及其执行结果如下:
SHOW GRANTS FOR 'testUser'@'localhost';
返回结果的第1行显示了user 表中的账户信息;接下来的行以GRANT SELECT ON关键字开头,表示用户被授予了SELECT权限;*.*表示SELECT权限作用于所有数据库的所有数据表;IDENTIFIED BY PASSWORD关键字后面为用户加密后的密码。
在这里,只是定义了个别的用户权限,GRANT可以显示更加详细的权限信息,包括全局级的和非全局级的权限,如果表层级或者列层级的权限被授予用户的话,它们也能在结果中显示出来。
在前面创建用户时,查看新建的账户时使用SELECT语句,也可以通过SELECT 语句查看user表中的各个权限字段以确定用户的权限信息,其基本语法格式如下:
SELECT privileges_list FROM user WHERE user ='username', host= 'hostname';
其中,privileges_list为想要查看的权限字段,可以为Select_priv、Insert_priv等。根据需要选择要查询的字段。
5,访问控制
正常情况下,并不希望每个用户都可以执行所有的数据库操作。当MySQL 允许一个用户执行各种操作时,它将首先核实该用户向MySQL服务器发送的连接请求,然后确认用户的操作请求是否被允许。MySQL 的访问控制分为两个阶段:连接核实阶段和请求核实阶段。
1,连接核实阶段
当连接MySQL服务器时,服务器基于用户的身份以及用户是否能通过正确的密码身份验证来接受或拒绝连接。即客户端用户连接请求中会提供用户名称、主机地址名和密码,MySQL使用user表中的3个字段(Host、User 和 Password)执行身份检查,服务器只有在user表记录的Host和User字段匹配客户端主机名和用户名,并且提供正确的密码时才接受连接。如果连接核实没有通过,服务器完全拒绝访问;否则,服务器接受连接,然后进入阶段⒉等待用户请求。
2,请求核实阶段
建立连接之后,服务器进入访问控制的阶段2。对在此连接上的每个请求,服务器检查用户要执行的操作,然后检查是否有足够的权限来执行它。这正是在授权表中的权限列发挥作用的地方。这些权限可以来自user、db、host、tables_priv或columns_priv表。
确认权限时,MySQL首先检查user表,如果指定的权限没有在user表中被授权;MySQL将检查db表,db表是下一安全层级,其中的权限限定于数据库层级,在该层级的SELECT权限允许用户查看指定数据库的所有表中的数据;如果在该层级没有找到限定的权限,则 MySQL继续检查tables_priv表以及columns_priv表,如果所有权限表都检查完毕,但还是没有找到允许的权限操作,MySQL将返回错误信息,用户请求的操作不能执行,操作失败。请求核实的过程如图1所示。
图1 MySQL请求核实过程
提示:MySQL通过向下层级的顺序检查权限表(从user表到columns_priv表),但并不是所有的权限都要执行该过程。例如,一个用户登录到MySQL服务器之后只执行对MySQL的管理操作,此时,只涉及管理权限,因此 MySQL只检查user表。另外,如果请求的权限操作不被允,MySQL也不会继续检查下一层级的表。
6,疑问解答
疑问1∶已经将一个账户的信息从数据库中完全删除,为什么该用户还能登录数据库?出现这种情况的原因可能有多种,最有可能的是在user 数据表中存在匿名账户。在user表中匿名账户的User 字段值为空字符串,这会允许任何人连接到数据库,检测是否存在匿名登录用户的方法是,输入以下语句:
SELECT * FROM user WHERE User =''';
如果有记录返回,则说明存在匿名用户,需要删除该记录,以保证数据库的访问安全,删除语句为:
DELETE FROM user WHERE user= '';
这样一来,该账户肯定不能登录MySQL服务器了。
疑问2∶应该使用哪种方法创建用户?
前面介绍了创建用户的几种方法:GRANT语句、CREATE USER语句和直接操作user表。
一般情况,最好使用GRANT或者CREATE USER语句,而不要直接将用户信息插入user表,因为user表中存储了全局级别的权限以及其他的账户信息,如果意外破坏了user表中的记录,则可能会对MySQL服务器造成很大影响。
7,总结
权限管理,这块平时也是数据库dba管理员去控制。一般都会授予增删改查等权限,如果开发中遇到了权限不同的报错,找数据库dba管理员去授权。
上一篇:《mysql 用户管理-账户管理》
下一篇:《范式-规范化理论》
相关文章:
mysql 用户管理-权限管理
学习了用户管理,再学习下权限管理。 3,权限管理 权限管理主要是对登录到MySQL的用户进行权限验证。所有用户的权限都存储在MySQL的权限表中,不合理的权限规划会给MySQL服务器带来安全隐患。数据库管理员要对所有用户的权限进行合理规…...
RabbitMQ--04--发布订阅模式 (fanout)-案例
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 发布订阅模式 (fanout)---案例前言RabbitListener和RabbitHandler的使用 1.通过Spring官网快速创建一个RabbitMQ的生产者项目2.导入项目后在application.yml文件中配…...
基于java+SpringBoot+Vue的网上书城管理系统设计与实现
基于javaSpringBootVue的网上书城管理系统设计与实现 开发语言: Java 数据库: MySQL技术: SpringBoot MyBatis工具: IDEA/Eclipse、Navicat、Maven 系统展示 前台展示 后台展示 系统简介 整体功能包含: 网上书城管理系统是一个基于互联网的在线购书平台&#…...
PCL点云处理之M估计样本一致性(MSAC)平面拟合(二百三十六)
PCL点云处理之M估计样本一致性(MSAC)平面拟合(二百三十五六) 一、算法介绍二、使用步骤1.代码2.效果一、算法介绍 写论文当然用RANSAC的优化变种算法MSAC啊,RANSAC太土太LOW了哈哈 MSAC算法(M-estimator Sample Consensus)是RANSAC(Random Sample Consensus)的一种…...
通过WSL在阿里云上部署Vue项目
参考: 阿里云上搭建网站-CSDN博客 云服务器重装 关闭当前运行实例 更换操作系统,还有其他的进入方式。 选择ubuntu系统(和WSL使用相同的系统)。 设置用户和密码。发送短信验证码。 新系统更新。秒速干净的新系统设置完成。 这…...
240330-大模型资源-使用教程-部署方式-部分笔记
A. 大模型资源 Models - Hugging FaceHF-Mirror - Huggingface 镜像站模型库首页 魔搭社区 B. 使用教程 HuggingFace HuggingFace 10分钟快速入门(一),利用Transformers,Pipeline探索AI。_哔哩哔哩_bilibiliHuggingFace快速入…...
uni-app 富文本编辑器
<template><view class"container"><view>标题:<u-input placeholder"请输入标题"></u-input></view><view class"page-body"><view classwrapper><view classtoolbar tap"…...
3D汽车模型线上三维互动展示提供视觉盛宴
VR全景虚拟看车软件正在引领汽车展览行业迈向一个全新的时代,它不仅颠覆了传统展览的局限,还为参展者提供了前所未有的高效、便捷和互动体验。借助于尖端的vr虚拟现实技术、逼真的web3d开发、先进的云计算能力以及强大的大数据处理,这一在线展…...
如何在Flutter中进行网络请求?
Hello!大家好,我是咕噜铁蛋,你们的好朋友!今天,我想和大家分享一下在Flutter中如何进行网络请求。Flutter作为一个跨平台的开发框架,网络请求是其实现数据交互的重要一环。下面,我将详细介绍几种…...
node:ReferenceError: XMLHttpRequest is not defined
node:ReferenceError: XMLHttpRequest is not defined 1 前言 node执行如下代码: new XMLHttpRequest()报错提示:ReferenceError: XMLHttpRequest is not defined 2 解决 2.1 可能原因是没有安装xmlhttprequest npm install xmlhttpreq…...
PHP定时任务框架taskPHP3.0的学习记录1(TaskPHP、执行任务类的实操代码实例)
TaskPHP是一个基于PHP的定时任务框架,它提供了一个简单、灵活且易于使用的解决方案,用于在PHP环境中执行定时任务。下面是对TaskPHP框架的简要介绍: 简单易用:TaskPHP的设计目标是让定时任务的创建和管理变得简单。通过简单的配置…...
图腾柱PFC:HP1010为您的电动两轮车之旅提供绿色,高效,安全的动力
电动两轮车不仅为当今生活提供了便利,更是一种健康和绿色的出行方式。想象一下,在经过一整晚的充分休息,骑上爱车,满血复活的准备开始新的一天。您会愿意带着如何给心爱的两轮车充电的担心开始这一天吗? 随着越来越…...
动态规划-----背包类问题(0-1背包与完全背包)详解
目录 什么是背包问题? 动态规划问题的一般解决办法: 0-1背包问题: 0 - 1背包类问题 分割等和子集: 完全背包问题: 完全背包类问题 零钱兑换II: 什么是背包问题? 背包问题(Knapsack problem)是一种…...
通过 Docker 搭建 BookStack
文章目录 环境说明1、官方网站2、通过 Docker 部署总结 环境说明 操作系统版本:CentOS Linux release 7.9.2009 (Core) Docker 版本:Docker Engine - Community 24.0.2 BookStack 版本:23.02.3 MySQL 版本:8.0.32 1、官方网站 G…...
通俗易懂:什么是Java虚拟机(JVM)?它的主要作用是什么?
Java虚拟机(Java Virtual Machine, JVM)是一种软件实现的抽象计算机,它负责执行Java字节码(Bytecode)。Java程序并不是直接在物理计算机上运行,而是先由Java编译器将源代码编译成与平台无关的字节码&#x…...
[k8s] kubectl执行失败后等待一段时间再重试 (Shell实现)
使用Shell脚本实现功能: kubectl执行失败后,等待30秒后再重试,一共重试3次,代码如下: #!/bin/bashKUBECTL_BIN/var/lib/snapd/snap/bin/kubectlERR_MSG_K8S_NOTRUNNING"microk8s is not running" ERR_MSG_C…...
java中的static和单例模式
同一个类中,访问其类成员,可以省略类名不写 static:叫静态,可以修饰成员变量,成员方法。 成员变量按照有无static修饰,分为两种: 类变量:有static修饰,属于类…...
RabbitMQ相关总结
Broker 异步调用中用Broker进行事件订阅和调用,完成解耦 没有强依赖,不用担心级联失败 流量削峰 MQ 的下载 1.可以使用命令拉取镜像 docker pull rabbitmq:3-management 2.也可以直接去官网下载tar包,然后上传到虚拟机上面 spring AMQP…...
RAFT: Adapting Language Model to Domain Specific RAG
今天来介绍下伯克利大学3.15日新发的一篇paper,RAFT: Adapting Language Model to Domain Specific RAG 主要研究了如何构造训练数据来微调你的LLM,从而在LLM在垂直领域的RAG中表现更好。并且开源了代码:GitHub - ShishirPatil/gorilla: Gorilla: An API store for LLMs 主…...
第十五届蓝桥杯第三期模拟赛第十题 ← 上楼梯
【问题描述】 小蓝要上一个楼梯,楼梯共有 n 级台阶(即小蓝总共要走 n 级)。小蓝每一步可以走 a 级、b 级或 c 级台阶。 请问小蓝总共有多少种方案能正好走到楼梯顶端?【输入格式】 输入的第一行包含一个整数 n 。 第二行包含三个整…...
第四题:星期一
题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 整个 20 世纪(1901 年 1 月 1 日至 2000 年 12 月 31 日之间),一共有多少个星期一?(不要告诉我你不知道今天是星期几…...
Mamba: Linear-Time Sequence Modeling with Selective State Spaces(论文笔记)
What can I say? 2024年我还能说什么? Mamba out! 曼巴出来了! 原文链接: [2312.00752] Mamba: Linear-Time Sequence Modeling with Selective State Spaces (arxiv.org) 原文笔记: What: Mamba: Linear-Time …...
2024蓝桥杯每日一题(区间DP)
备战2024年蓝桥杯 -- 每日一题 Python大学A组 试题一:游戏 试题二:石子合并 试题三:密码脱落 试题四:能量项链 试题一:游戏 【题目描述】 玩家一和玩家二共同玩一个小游戏。给定一个包含 N 个…...
LeetCode-2952. 需要添加的硬币的最小数量【贪心 数组 排序】
LeetCode-2952. 需要添加的硬币的最小数量【贪心 数组 排序】 题目描述:解题思路一:看提示主要是用贪心和排序。那我们肯定是首先对coins排序。然后依次遍历coins[i],获取当前可以获取金额范围,和判断是否加入新硬币。判断规则如下…...
新书速递——《可解释AI实战(PyTorch版)》
本书旨在帮助你实施最新的可解释AI技术,以构建公平且可解释的AI系统。可解释AI是当今AI研究中的热门话题,但只有少数资源和指南涵盖了所有重要技术,这些技术对实践者来说非常有价值。本书旨在填补这一空白。 本书读者对象 本书既适合那些有兴…...
国产数据库中统计信息自动更新机制
数据库中统计信息描述的数据库中表和索引的大小数以及数据分布状况,统计信息的准确性对优化器选择执行计划时具有重要的参考意义。本文简要整理了下传统数据库和国产数据库中统计信息的自动更新机制,以加深了解。 1、数据库统计信息介绍 优化器是数据库…...
【C++】入门C++(中)
好的,我们继续,这是 C专栏的第二篇博客,还没读过上一篇博客可以进入我创建的专栏阅读 入门C(上)再回来哦~ 下面我们要讲的第一个概念就是函数重载 函数重载 1. 函数重载概念 什么是函数重载? 简单来说…...
javaIO
file类 一个File类的对象可以表示一个具体的文件或目录 mkdir 创建单级文件夹 mkdirs 创建多级文件夹 delete 删除一个文件夹时,文件夹里面必须是空的 listfiles 将文件夹的子集放到一个file类型的数组中 输入及输出的概念 输入input 输出output 把jav…...
睿尔曼超轻量仿人机械臂之复合机器人底盘介绍及接口调用
机器人移动平台是一个包含完整成熟的感知、认知和定位导航能力的轮式机器人底盘产品级平台,产品致力于为各行业细分市场的商用轮式服务机器人提供一站式移动机器人解决方案,让合作伙伴专注在核心业务/人机交互的实现。以下是我司产品双臂机器人以及复合升…...
用JSch实现远程传输文件并打包成jar
本文将简单介绍一下 JSch 这个Java的第三方库的一个简单用法,并以此为实例,讲解 IntelliJ 中打包成 jar 包的2种方式。 实现目标 我们的目标是,做出一个jar包,它能够实现类似于 scp 命令的远程传输文件的功能。用法如下…...
广州疫情 高位平台/安卓优化大师2021
当用浏览器浏览网页的时候,当我们点击一个连接的时候,浏览器就会转到新的页面去。整个过程如下: 1)用户在当前页面点击->2)浏览器获取新的URL->3)浏览器转到新的URL。现在,假设我们有一个pdf的阅读程…...
龙华做网站的公司/百度收录接口
[TOC] 1. 什么是碎片 碎片,是Android 3.0(API 11)提出的,为了兼容低版本,support-v4库中也开发了一套Fragment API,最低兼容Android 1.6。 过去support-v4库是一个jar包,24.2.0版本开始&…...
wordpress的分类目录做成树/seo培训教程
文章目录一、题目1、题目描述2、基础框架3、原题链接二、解题报告1、思路分析2、时间复杂度3、代码详解三、本题小知识四、加群须知一、题目 1、题目描述 给你一个字符串数组 words,找出并返回数组中的第一个回文字符串 。如果不存在满足要求的字符串,返…...
域名查询是否被注册/郑州本地seo顾问
这个问题是由于使用了较新的C17标准语言,因为Windows旧的SDK定义有一个byte的类型,但在C17里也有定义std::byte类型,这样就会造成重复定义。 解决方法: 1.可以预定义一个宏:_HAS_STD_BYTE0,这样设置就可以…...
南宁网络推广平台有哪些/重庆关键词优化平台
Java变量可分为局部变量和成员变量,其中局部变量又可分为三类:形参、方法内局部变量、代码块局部变量。 类体内定义的变量称为成员变量(Field),没有使用static修饰的称为非静态变量或实例变量;如果使用sta…...
长沙网站建设qq交流群/seo合作代理
Python中利用函数装饰器实现备忘功能 这篇文章主要介绍了Python中利用函数装饰器实现备忘功能,同时还降到了利用装饰器来检查函数的递归、确保参数传递的正确,需要的朋友可以参考下“备忘”的定义 “memoization”(备忘)这个词是由Donald Mic…...