MySQL 账号权限
一、账号管理
1. 查看账号列表
MySQL用户账号和信息存储在名为 mysql
的数据库中。一般不需要直接访问 mysql
数据库和表,但有时需要直接访问。例如,查看数据库所有用户账号列表时。
USE mysql;
SELECT DISTINCT(`user`) FROM user;
- 数据库
mysql
有一个名为user
的表,它包含所有用户账号。user
表有一个名为user
的字段,它存储账号名。 - 进入数据库
mysql
,查看user
表中的user
列,由于有些账号会分多行记录,DISTINCT
用于去重。
mysql> USE mysql;
Database changedmysql> SELECT DISTINCT(`user`) FROM user;
+-----------+
| user |
+-----------+
| root |
| mysql.sys |
+-----------+
2 rows in set (0.07 sec)
- user字段 表示账号名,表示当前数据库有
root
和mysql.sys
两个账号。
2. 创建账号
可以使用 CREATE USER
语句创建一个新用户账号。
CREATE USER account_name IDENTIFIED BY 'password';
IDENTIFIED BY
用于设定密码,MySQL 会先将密码进行加密,在将其保存到 user 表。
使用
GRANT
或INSERT GRANT
语句也可以创建用户账号,但一般来说CREATE USER
是最清楚和最简单的句子。
使用CREATE USER
创建用户账号,必须接着分配访问权限。新创建的用户账号没有访问权限。它们能登录MySQL,但不能看到数据,不能执行任何数据库操作。
可以使用GRANT
语句创建用户账号并授权,该语句会在文章授权部分讲解。用于账号都存储在数据库mysql
的user
表中,理论上也可以通过直接插入行到 user 表来增加用户,不过为安全起见,一般不建议这样做。MySQL用来存储用户账号信息的表(以及表模式等)极为重要,对它们的任何毁坏都可能严重地伤害到MySQL服务器。因此,最好不要直接修改数据库mysql
中表的数据。
- 为数据库添加账号
zhangsan
密码为123456
mysql> CREATE USER zhangsan IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.06 sec)mysql> SELECT DISTINCT(`user`) FROM user;
+-----------+
| user |
+-----------+
| root |
| zhangsan |
| mysql.sys |
+-----------+
3 rows in set (0.07 sec)
- 使用 zhangsan 的账号和密码登录,成功登录 MySQL。
[vagrant~] ]$mysql -uzhangsan -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
......
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>
注意,不要直接在命令行中输入密码,因为命令行的输入历史都会被记录下来,很同意导致密码泄露。
3. 账号重命名
可以使用 RENAME USER
语句为账号重命名。
RENAME USER old_name TO new_name;
仅 MySQL 5及之后的版本支持RENAME USER
。
MySQL 5以前的版本,要重命名一个用户,可使用 UPDATE 直接更新 user 表(谨慎操作)。
- 将数据库账号
zhangsan
重命名为lisi
mysql> RENAME USER zhangsan TO lisi;
Query OK, 0 rows affected (0.34 sec)mysql> SELECT DISTINCT(`user`) FROM user;
+-----------+
| user |
+-----------+
| lisi |
| root |
| mysql.sys |
+-----------+
3 rows in set (0.08 sec)
4. 重置账号密码
可以使用 SET PASSWORD
语句重置账号密码。
SET PASSWORD FOR account_name = Password('password');
使用 SET PASSWORD
重置账号密码。新密码必须通过 Password() 函数进行加密。
当不指定用户名时, SET PASSWORD
会重置当前登录用户的密码。
SET PASSWORD = Password('password');
- 将账号
lisi
的密码改为abcdef
mysql> SET PASSWORD FOR lisi = Password('abcdef');
Query OK, 0 rows affected (0.03 sec)
- 使用 lisi 的账号和新密码登录,成功登录 MySQL。
[vagrant~] ]$mysql -ulisi -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
......
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>
- 将当前登录账号的密码重置为 10086
mysql> SET PASSWORD = Password('10086');
Query OK, 0 rows affected (0.00 sec)
5. 删除账号
可以使用 DROP USER
语句删除账号(以及相关的权限)。
DROP USER account_name;
MySQL 5及之后的版本,DROP USER
删除用户账号时会自动删除所有相关的账号权限。
在MySQL 5以前,DROP USER
只能用来删除用户账号,不能删除相关的权限。因此,如果使用旧版本的MySQL,需要先用REVOKE
删除与账号相关的权限,然后再用DROP USER
删除账号。
- 删除账号
lisi
mysql> DROP USER lisi;
Query OK, 0 rows affected (0.00 sec)mysql> SELECT DISTINCT(`user`) FROM user;
+-----------+
| user |
+-----------+
| root |
| mysql.sys |
+-----------+
2 rows in set (0.07 sec)
二、权限管理
访问控制
MySQL服务器的安全基础是:用户应该对他们需要的数据具有适当的访问权,既不能多也不能少。
考虑以下情况:
- 多数用户只需要对表进行读和写,但少数用户甚至需要能创建和删除表;
- 某些用户需要读表,但可能不需要更新表;
- 你可能想允许用户添加数据,但不允许他们删除数据;
- 某些用户(管理员)可能需要处理用户账号的权限,但多数用户不需要;
- 你可能想让用户通过存储过程访问数据,但不允许他们直接访问数据;
- 你可能想根据用户登录的地点限制对某些功能的访问。
这些都只是例子,但有助于说明一个重要的事实,即你需要给用户提供他们所需的访问权,且仅提供他们所需的访问权。这就是所谓的访问控制,管理访问控制需要创建和管理用户账号。
严肃对待 root 账号的使用
MySQL 会默认创建一个名为 root
的用户账号,它对整个 MySQL 服务器具有完全的控制。不过在日常的 MySQL 操作中(特别是生产环境),决不能使用 root 账号登录。应该创建一系列的账号,有的用于管理,有的供用户使用,有的供开发人员使用,等等。应该严肃对待 root 账号的使用,仅在绝对需要时使用它。
访问控制的目的
- 防止用户的恶意企图。
- 防止用户无意识错误造成数据错乱。这是更为常见的情况。如错打 SQL 语句,在不合适的数据库中操作或其他一些用户错误。
通过保证用户不能执行他们不应该执行的语句,访问控制有助于避免这些情况的发生。
查看账号权限
SHOW GRANTS[ FOR account_name][@host];
- 当不使用
FOR
指定用户时,默认是查看自己的账号权限。 - 当使用
SHOW GRANTS FOR account_name@host
时,可查看指定账号在指定主机下的权限。可以在数据库mysql
中使用SELECT user,host FROM user;
查看账号的主机列表。
mysql> USE mysql;
Database changedmysql> SELECT user,host FROM user;
+-----------+-----------+
| user | host |
+-----------+-----------+
| root | % |
| mysql.sys | localhost |
| root | localhost |
+-----------+-----------+
3 rows in set (0.06 sec)
host字段: 表示账号可以在哪些主机或IP地址登录。%
代表任何IP地址都可以登录(生产环境中这样做是非常危险的),localhost
表示只允许本机登录。
将host
设为%
,就代表任何IP地址都可以访问该数据库,在生产环境中这样做是非常危险的。
也可以使用其他手段来提高数据库安全性:比如设置防火墙、iptable;如果是云平台的数据库还可以通过安全组等方式提高安全性。
- 查看自己的账号(root)权限。
mysql> SHOW GRANTS;
+-------------------------------------------------------------+
| Grants for root@% |
+-------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION |
+-------------------------------------------------------------+
1 row in set (0.00 sec)
- 查看账号 root 在 localhost 下的权限。
mysql> SHOW GRANTS FOR root@localhost;
+---------------------------------------------------------------------+
| Grants for root@localhost |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+
1 row in set (0.00 sec)
输出结果显示账号root
有一个权限ALL PRIVILEGES ON *.*
,表示root
账号可以操作所有数据库和所有表。
- 使用
CREATE USER
创建一个账号zhangsan
,并查看zhangsan
的账号权限。
mysql> CREATE USER zhangsan IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.00 sec)mysql> SHOW GRANTS FOR zhangsan;
+---------------------------------------------------------------------------------------------------------+
| Grants for zhangsan@% |
+---------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'zhangsan'@'%' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' |
+---------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
输出结果显示账号zhangsan
有一个权限USAGE ON *.*
。 USAGE 表示根本没有权限,所以,此结果表示zhangsan
对任意数据库和任意表上对任何东西都没有操作权限。
- 登录账号
zhangsan
,并尝试进入test
数据库,被拒绝。
[vagrant~] ]$mysql -uzhangsan -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
......
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> use test;
ERROR 1044 (42000): Access denied for user 'zhangsan'@'%' to database 'test'
使用 CREATE USER
创建的用户账号默认没有访问权限。它们能登录MySQL,但不能看到数据,不能执行任何数据库操作。
为已存在的账号设置权限
可以使用 GRANT
语句为账号设置权限。至少给出以下信息:
- 账号名。
- 被授予访问权限的数据库或表。
- 要授予的权限。
GRANT <权限> ON <数据库名>.<表名> TO <账户名>;
- 给账号
zhangsan
赋予在test
数据库内的任意表查找和添加数据的权限。
mysql> GRANT SELECT, INSERT ON test.* TO 'zhangsan';
Query OK, 0 rows affected (0.00 sec)mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)mysql> SHOW GRANTS FOR zhangsan;
+---------------------------------------------------------------------------------------------------------+
| Grants for zhangsan@% |
+---------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'zhangsan'@'%' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' |
| GRANT SELECT, INSERT ON `test`.* TO 'zhangsan'@'%' |
+---------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
授权后必须FLUSH PRIVILEGES,否则无法立即生效。
- 登录账号
zhangsan
,可以成功进入到数据库test
,在user
表中插入一条数据,并从user
表查找数据。
mysql> USE test;
Database changedmysql> SHOW TABLES;
+----------------+
| Tables_in_test |
+----------------+
| user |
+----------------+
1 row in set (0.00 sec)mysql> INSERT INTO user (username, email) VALUES ('zhangsan', 'zhangsan@gmail.com');
Query OK, 1 row affected, 1 warning (0.00 sec)mysql> SELECT * FROM user;
+----+----------+--------------------+----------+--------+------------+
| id | username | email | password | status | created_at |
+----+----------+--------------------+----------+--------+------------+
| 1 | zhangsan | zhangsan@gmail.com | NULL | 0 | 0 |
+----+----------+--------------------+----------+--------+------------+
1 row in set (0.00 sec)
- 当
zhangsan
想要使用UPDATE
和DELETE
命令修改和删除这条数据时,被提示没有权限。
mysql> UPDATE user SET email='zhangsanfeng@gmail.com' WHERE username='zhangsan';
ERROR 1142 (42000): UPDATE command denied to user 'zhangsan'@'localhost' for table 'user'mysql> DELETE FROM user WHERE username='zhangsan';
ERROR 1142 (42000): DELETE command denied to user 'zhangsan'@'localhost' for table 'user'
创建账号并设置权限
GRANT <权限> ON <数据库名>.<表名> TO <账户名>@<主机名/IP> IDENTIFIED BY '<密码>'[ WITH GRANT OPTION];
WITH GRANT OPTION
用于赋予账号使用GRANT
和REVOKE
命令的权限,用于给账号授权和取消授权。此权限级别极高,一般只会将此权限授予数据库管理员账号。
- 创建账号
lisi
密码为abcdef
,在任何IP地址都可以登录,同时赋予lisi
在test
数据库内的任意表数据的增删改查权限。
mysql> GRANT SELECT, INSERT, UPDATE, DELETE ON test.* TO 'lisi'@'%' IDENTIFIED BY 'abcdef';
Query OK, 0 rows affected (0.00 sec)
将host
设为%
,就代表任何IP地址都可以访问该数据库,在生产环境中这样做是非常危险的。
也可以使用其他手段来提高数据库安全性:比如设置防火墙、iptable;如果是云平台的数据库还可以通过安全组等方式提高安全性。
- 登录账号
lisi
,可以成功进入到数据库test
,并对user
表数据进行增删改查。
[vagrant~] ]$mysql -ulisi -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
......
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> use test;
Database changedmysql> INSERT INTO user (username, email) VALUES ('lisi', 'lisi@gmail.com');
Query OK, 1 row affected, 1 warning (0.01 sec)mysql> SELECT * FROM user;
+----+----------+--------------------+----------+--------+------------+
| id | username | email | password | status | created_at |
+----+----------+--------------------+----------+--------+------------+
| 1 | zhangsan | zhangsan@gmail.com | NULL | 0 | 0 |
| 2 | lisi | lisi@gmail.com | NULL | 0 | 0 |
+----+----------+--------------------+----------+--------+------------+
2 rows in set (0.00 sec)mysql> UPDATE user SET email='lisiguang@gmail.com' WHERE username='lisi';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0mysql> DELETE FROM user WHERE username='zhangsan';
Query OK, 1 row affected (0.00 sec)mysql> SELECT * FROM user;
+----+----------+---------------------+----------+--------+------------+
| id | username | email | password | status | created_at |
+----+----------+---------------------+----------+--------+------------+
| 2 | lisi | lisiguang@gmail.com | NULL | 0 | 0 |
+----+----------+---------------------+----------+--------+------------+
1 row in set (0.00 sec)
撤销账号指定权限
可以使用 REVOKE
语句撤销账号指定权限。REVOKE
是 GRANT
的反操作。
REVOKE <权限> ON <数据库名>.<表名> FROM <账户名>;
- 删除账号
lisi
的 DELETE 权限。
mysql> REVOKE DELETE ON test.* FROM lisi;
Query OK, 0 rows affected (0.00 sec)mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)mysql> SHOW GRANTS FOR lisi;
+-----------------------------------------------------------------------------------------------------+
| Grants for lisi@% |
+-----------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'lisi'@'%' IDENTIFIED BY PASSWORD '*C2D24DCA38E9E862098B85BF0AB35CAA52803797' |
| GRANT SELECT, INSERT, UPDATE ON `test`.* TO 'lisi'@'%' |
+-----------------------------------------------------------------------------------------------------+
2 rows in set (0.04 sec)
- 当
lisi
想要使用DELETE
命令删除数据时,被提示没有权限。
mysql> DELETE FROM user WHERE username='lisi';
ERROR 1142 (42000): DELETE command denied to user 'lisi'@'localhost' for table 'user'
权限说明
GRANT
和 REVOKE
可在几个层次上控制访问权限:
- 整个服务器,使用
GRANT ALL
和REVOKE ALL
; - 整个数据库,使用
ON database.*
; - 特定的表,使用
ON database.table
; - 特定的列;
- 特定的存储过程。
权 限 | 说 明 |
---|---|
ALL | 除 GRANT OPTION 外的所有权限 |
ALTER | 使用 ALTER TABLE |
ALTER ROUTINE | 使用 ALTER PROCEDURE 和 DROP PROCEDURE |
CREATE | 使用 CREATE TABLE |
CREATE ROUTINE | 使用 CREATE PROCEDURE |
CREATE TEMPORARY TABLES | 使用 CREATE TEMPORARY TABLE |
CREATE USER | 使用 CREATE USER、DROP USER、RENAME USER 和 REVOKE ALL PRIVILEGES |
使用 CREATE VIEW | |
使用 DELETE | |
CREATE VIEW | 使用 DROP TABLE |
DELETE | 使用 CALL 和存储过程 |
DROP | 使用 SELECT INTO OUTFILE 和 LOAD DATA INFILE |
EXECUTE | 使用 GRANT 和 REVOKE |
FILE | 使用 CREATE INDEX 和 DROP INDEX |
GRANT OPTION | 使用 INSERT |
INDEX | 使用 LOCK TABLES |
INSERT | 使用 SHOW FULL PROCESSLIST |
LOCK TABLES | 使用 FLUSH |
PROCESS | 服务器位置的访问 |
RELOAD | 由复制从属使用 |
REPLICATION CLIENT | 使用 SELECT |
REPLICATION SLAVE | 使用 SHOW DATABASES |
SELECT | 使用 SHOW CREATE VIEW |
SHUTDOWN | 使用 mysqladmin shutdown(用来关闭MySQL) |
SUPER | 使用 CHANGE MASTER、KILL、LOGS、PURGE、MASTER 和 SET GLOBAL。还允许 mysqladmin 调试登录 |
UPDATE | 使用 UPDATE |
USAGE | 无访问权限 |
权限控制流程
最后附一张《MySQL性能调优与架构设计》中的权限控制流程图。
以 SELECT id,name FROM test.t4 where status = 'deleted';
为例。
相关文章:

MySQL 账号权限
mysql 在安装好后,默认是没有远端管理账号。 一、账号管理 1. 查看账号列表 MySQL用户账号和信息存储在名为 mysql 的数据库中。一般不需要直接访问 mysql 数据库和表,但有时需要直接访问。例如,查看数据库所有用户账号列表时。 USE mysql; …...

[Mongodb 5.0]单机启动
安装完mongodb后,会自动生成下面两个目录(mongod.conf中设定的),用来存放日志和数据 /var/lib/mongo (数据目录) /var/log/mongodb (日志目录) 要启动一个单机版的mongodb,一般有两种方式: 第一种启动方式:直接使用…...

[HDLBits] Exams/m2014 q4b
Implement the following circuit: module top_module (input clk,input d, input ar, // asynchronous resetoutput q);always(posedge clk or posedge ar) beginif(ar)q<1b0;elseq<d;end endmodule...

数据结构入门:队列
目录 文章目录 前言 1.队列 1.1 队列的概念及结构 1.2 队列的实现 1.2.1 队列的定义 1.2.2队列的初始化 1.2.3 入队 1.2.4 判空 1.2.5 出队 1.2.6 队头队尾数据 1.2.7 队列长度 1.2.8 队列销毁 总结 前言 队列,作为一种重要的数据结构,在计算机科学中扮演…...

面试热题(合并K个升序链表)
给定一个链表数组,每个链表都已经按升序排列。 请将所有链表合并到一个升序链表中,返回合并后的链表。 输入:lists [[1,4,5],[1,3,4],[2,6]] 输出:[1,1,2,3,4,4,5,6] 解释:链表数组如下: [1->4->5,1…...
优化过多if else判断代码
有些判断难免会遇到很多 if else 看起来很头疼 下面是一个优化示例 修改前 if(this.$route.query.deptId){this.queryParams.deptId this.$route.query.deptId}else if (this.$store.state.adaptation.roleSign.includes(fengongsicengji)) {const ancestorsId this.$stor…...

最强自动化测试框架Playwright (27)-跟踪查看器
Playwright Trace Viewer 是一个 GUI 工具,可帮助您在脚本运行后探索记录的 Playwright 跟踪。可以本地打开,也可以在trace.playwright.dev.打开, 录制跟踪文件 使用context.tracing.start进行录制,使用stop方法保存录制文件 b…...

【工作中问题解决实践 十一】Kafka消费者消费堆积且频繁rebalance
最近有点不走运,老是遇到基础服务的问题,还是记着点儿解决方法,以后再遇到快速解决吧,今天遇到这个问题倒不算紧急,但也能通过这个问题熟悉一下Kafka的配置。 问题背景 正在开会的时候突然收到一连串的报警ÿ…...
ChatGpt提示词大全
中文版本 行为 提示词 Linux终端 我希望你能充当一个linux终端。我将输入命令,你会回复终端应该显示什么。我想让你只回复在一个唯一的代码块内的终端输出,而没有别的。不要写一些解释。不要键入命令,除非我指示你这样做。当我需要用英语告…...

利用SimpleDateFormat或者LocalDateTime生成格式为“yyyy-MM-dd HH:mm:ss“的当前时间
java程序: // 利用LocalDateTime生成格式为"yyyy-MM-dd HH:mm:ss"的当前时间 DateTimeFormatter formatter DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); LocalDateTime now LocalDateTime.now(); String time1 now.format(format…...

使用 Postman 批量发送请求的最佳实践
目录 背景 批量发送? 起因 思考 Postman 批量发送接口 创建集合和接口 批量发送接口 资料获取方法 背景 最近写了几个接口: 获取 books 的接口获取 likes 的接口获取 collections 的接口 但是我还是不放心,因为这些接口到底稳不稳…...

Docker一键部署项目,无需登录XShell
文章目录 一键部署项目Docker手动部署SpringBoot项目编写docker部署的脚本文件script.sh 脚本内容 特别注意!编写dockerfiledockerfile 文件内容 上传后端服务的jar包到服务器中执行 script 脚本部署后端服务 自动部署SpringBoot项目引入jsch依赖编写jsch工具类执行…...

GIt Squash 多个提交压缩提交
假设你有一个名为 feature 的分支,它包含三个提交(A, B, C),并且你想将这三个提交压缩成一个。下面是如何做到这一点的。 首先,找出你要开始压缩的那个最早提交的哈希值。在这个例子中,我们假设 A 是最早的…...

【数据结构】栈与队列
1 栈 1.1 栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出 LIFO (Last In First Out) 的原则。 压栈:栈…...

突然让做性能测试?试试RunnerGo
当前,性能测试已经是一名软件测试工程师必须要了解,甚至熟练使用的一项技能了,在工作时可能每次发版都要跑一遍性能,跑一遍自动化。性能测试入门容易,深入则需要太多的知识量,今天这篇文章给大家带来&#…...

(7)(7.4) 集结航点
文章目录 7.4.1 概述 7.4.2 设置集结航点 7.4.3 飞行示例 7.4.4 附录 7.4.1 概述 通常情况下,当固定翼或旋翼飞机进入"返回发射"(Return to Launch (RTL))模式(通常由自动驾驶仪失控保护触发)(failsafe)时,默认行为…...
基于kubeadm部署K8S集群:上篇
目录 一、环境准备 1、主机初始化配置 2、配置主机名绑定hosts,不同主机名称不同 3、主机配置初始化 4、部署docker环境 二、部署kubernetes集群 1、组件介绍 2、所有主机配置阿里云yum源 3、安装kubelet 、kubeadm 、kubectl 4、配置init-config.yaml 5、…...
机器学习-特征选择:如何使用递归特征消除算法自动筛选出最优特征?
一、引言 在实际应用中,特征选择作为机器学习和数据挖掘领域的重要环节,对于提高模型性能和减少计算开销具有关键影响。特征选择是从原始特征集中选择最相关和最具区分力的特征子集,以提高模型的泛化能力和可解释性。 特征选择在实践中具有以…...
学生成绩管理系统V1.0
某班有最多不超过30人(具体人数由键盘输入)参加某门课程的考试,用一维数组作函数参数编程实现如下学生成绩管理: (1)录入每个学生的学号和考试成绩; (2)计算课程的总分…...

嵌入式:ARM Day1
1. 思维导图 2.作业一 3.作业2...

Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...

高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...

10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...

android RelativeLayout布局
<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...
Qt 事件处理中 return 的深入解析
Qt 事件处理中 return 的深入解析 在 Qt 事件处理中,return 语句的使用是另一个关键概念,它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别:不同层级的事件处理 方…...
Spring Security 认证流程——补充
一、认证流程概述 Spring Security 的认证流程基于 过滤器链(Filter Chain),核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤: 用户提交登录请求拦…...

客户案例 | 短视频点播企业海外视频加速与成本优化:MediaPackage+Cloudfront 技术重构实践
01技术背景与业务挑战 某短视频点播企业深耕国内用户市场,但其后台应用系统部署于东南亚印尼 IDC 机房。 随着业务规模扩大,传统架构已较难满足当前企业发展的需求,企业面临着三重挑战: ① 业务:国内用户访问海外服…...