《MySQL 权限与访问进阶:普通用户搭建、跨端登录及 C/C++ 开发对接教程》

《MySQL 权限与访问进阶:普通用户搭建、跨端登录及 C/C++ 开发对接教程》
前引:在 MySQL 开发与运维中,普通用户的创建与权限管控是保障数据库安全的基础,而本地连接、远程访问的配置,以及 C/C++ 程序的对接调用,则是打通 “数据库 - 应用” 链路的核心环节。很多开发者在实际操作中会遇到 “用户创建后登录失败”“远程连接被拒绝”“C/C++ 接口调用报错” 等问题,本文将从实战出发,一步步拆解 MySQL 普通用户的创建配置、本地 / 远程登录的关键步骤,以及 C/C++ 访问 MySQL 的完整流程(含环境搭建、代码实现、常见问题排查),帮助开发者快速搞定多场景下的 MySQL 访问需求!

目录

【一】普通用户的创建

(1)查看user表

(2)创建普通用户

(3)删除普通用户

(4)修改密码

(5)数据库权限

(6)回收权限

【二】使用C语言链接访问库

(1)下载库文件

(2)查看库文件

(3)语言检验

【三】语言操作库(接口学习)

(1)初始化

(2)设置字符集

(3)连接MySQL

(4)关闭连接

(5)操作指令

(1)增删

(2)获取输出内容

(6)完整代码


【一】普通用户的创建

(1)查看user表

user表属于mysql数据库,需先切换到该库:

use mysql; -- 切换到mysql数据库

再在 user 表查看账户:

select host,user,authentication_string from user;
(2)创建普通用户
注意:本地登录,‘登录主机/ip’填 localhost 即可,想简单的公网登录填 %
create user '用户名'@'登陆主机/ip' identified by '密码'; 
(3)删除普通用户

主机名可以用上面的 localhost 或者 % 替换,也可以用真实的主机IP

drop user '用户名'@'主机名';
(4)修改密码
自己改自己的密码:
drop user '用户名'@'主机名';
root 账号改指定普通用户的密码:
set password for '用户名'@'主机名'=password('新的密码');
(5)数据库权限
权限列表如下,基本就是任务指令关键字:

给用户添加权限:

grant 权限列表 on 库.对象名 to '用户名'@'登陆位置';
* . * : 代表本系统中的所有数据库的所有对象(表,视图,存储过程等)

库 . * : 表示某个数据库中的所有数据对象(表,视图,存储过程等)

例如:

刷新权限:

flush privileges;

然后使用 newuser 普通用户登入访问授权的数据库和表:

(6)回收权限
revoke 权限列表 on 库.对象名 from '用户名'@'登陆位置';

【二】使用C语言链接访问库

如果是C++语言,原理相同!
(1)下载库文件

如果你想要挑战自己,可以去官网下载,再导入:

https://dev.mysql.com/downloads/

如果你是 Ubuntu ,可以终端直接执行下面指令安装库:

sudo apt update && sudo apt install libmysqlclient-dev
(2)查看库文件
# 列出包对应的所有文件(包括头文件、库文件) dpkg -L libmysqlclient-dev

库文件被放在 /usr/include/mysql 目录下:可以看到有 mysql.h

(3)语言检验

利用下面的函数来检验库文件是否导入成功:

mysql_get_client_info()
注意:编译需要告诉编译器头文件和库文件的位置,先找头文件再链接库文件

          

【三】语言操作库(接口学习)

(1)初始化
mysql_init(null);

例如:

(2)设置字符集
mysql_options(初始化的mysql指针, MYSQL_SET_CHARSET_NAME, "utf8mb4");

例如:

(3)连接MySQL
mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long client_flag);
参数含义场景取值
mysql已初始化的MYSQL句柄指针mysql_init()返回的指针
hostMySQL 服务器地址本地连接填"localhost""127.0.0.1"或具体IP
userMySQL 登录用户名你的"newuser"
passwd登录密码newuser的实际密码(如"123456"
db要默认连接的数据库名你需要访问的数据库(如"testdb",填NULL则不指定)
portMySQL 服务端口默认3306
unix_socket本地套接字文件(仅 Unix/Linux)本地连接填NULL(使用默认套接字)
client_flag连接标志(如压缩、SSL 等)默认填0即可

例如:

(4)关闭连接
//关闭连接,释放资源 mysql_close(mysql_init返回的指针);
(5)操作指令
(1)增删
int mysql_query(MYSQL *mysql, const char *stmt_str);
  • 参数:mysql为连接句柄,stmt_str为要执行的 SQL 字符串
  • 返回值:成功返回0,失败返回非0

例如:现在有一个表,我用语言执行插入

重新编译+执行:

结果:

(2)获取输出内容
解决问题:如果利用mysql__query执行打印相关的语句,比如select是无法显示的

其实它是将输出的内容信息放在一个二维矩阵里面,二级指针的形式,返回给我们行和列,只要遍历它返回的行和列也就遍历了整个二维字符串数组,拿到了输出内容,下面是接口:

//获取结果集,有了这个函数才可以继续 MYSQL_RES *result = mysql_store_result(mysql_init的返回值);
//关闭文件接口 mysql_free_result(result);

注意:上面这个result相当于就是文件接口,使用完需要及时关闭

//获取结果行数 my_ulonglong mysql_num_rows(MYSQL_RES *res);
  • 参数resmysql_store_result()返回的结果集指针
  • 返回值:结果集的行数(my_ulonglong是无符号长整型,可通过%llu格式化输出)
//获取结果列数 unsigned int mysql_num_fields(MYSQL_RES *res);
  • 参数res是结果集指针
  • 返回值:结果集的列数(无符号整数)
//获取列名称 MYSQL_FIELD *mysql_fetch_fields(MYSQL_RES *res);
  • 参数res是结果集指针。
  • 返回值MYSQL_FIELD结构体数组,数组长度等于mysql_num_fields(res)的返回值。每个MYSQL_FIELD结构体的核心成员包括:
    • name:列名(字符串);
    • type:列的数据类型(如MYSQL_TYPE_INT对应 INT 类型);
    • length:列的定义长度。

例如:

(6)完整代码
#include<stdio.h> #include<mysql.h> int main() { //初始化 MYSQL* my =mysql_init(NULL); if(my==NULL) { printf("sorry,mysql_init is errno"); } //设置字符集 mysql_options(my, MYSQL_SET_CHARSET_NAME, "utf8mb4"); //连接MySQL mysql_real_connect(my, "localhost", "newuser", "123456", "hello", (unsigned int)3306, NULL, (unsigned long) 0); //操作 const char* ptr="select * from student"; mysql_query(my,ptr); //获取结果集 MYSQL_RES *result = mysql_store_result(my); //获取行数 my_ulonglong row_count = mysql_num_rows(result); //获取列数 unsigned int col_count = mysql_num_fields(result); //获取列名称 MYSQL_FIELD *fields = mysql_fetch_fields(result); //打印列名称 for(unsigned int i=0;i<col_count;i++) { printf("%s\t",fields[i].name); } printf("\n"); //打印数据(row用来读取每一行的数据) MYSQL_ROW row; while (row = mysql_fetch_row(result)) { //逐列打印每行数据 for (unsigned int i = 0; i < col_count; i++) { printf("%s\t", row[i]); } printf("\n"); // 每一行打印完换行 } //闭连接,释放资源 mysql_free_result(result); mysql_close(my); return 0; }

Read more

深度解析 GitHub Copilot Agent Skills:如何打造可跨项目的 AI 专属“工具箱”

前言 随着 GitHub Copilot 从单纯的“代码补全”工具向 Copilot Agent(AI 代理) 进化,开发者们迎来了更高的定制化需求。我们不仅希望 AI 能写代码,更希望它能理解团队的特殊规范、掌握内部工具的使用方法,甚至在不同的项目中复用这些经验。 Agent Skills(代理技能) 正是解决这一痛点的核心机制。本文将深入解析 Copilot Skills 的工作原理,并分享如何通过软链接(Symbolic Link)与自动化工作流,构建一套高效的个人及团队知识库。 一、 什么是 Agent Skills? 如果说 Copilot 是一个通用的“AI 程序员”,那么 Skill(技能) 就是你为它配备的专用工具箱。 它不仅仅是一段简单的提示词(Prompt),而是一个包含元数据、指令和执行资源的标准文件夹结构。当

By Ne0inhk

Git-RSCLIP GPU利用率优化教程:显存占用与推理速度平衡策略

Git-RSCLIP GPU利用率优化教程:显存占用与推理速度平衡策略 1. 引言:为什么需要GPU优化 Git-RSCLIP作为专为遥感图像设计的图文检索模型,在实际应用中经常面临GPU资源紧张的问题。许多用户在部署后发现,虽然模型功能强大,但显存占用高、推理速度慢,影响了实际使用体验。 本文将分享一套实用的GPU优化策略,帮助你在保持模型精度的同时,显著提升推理效率。无论你是个人开发者还是团队技术负责人,这些方法都能让你的Git-RSCLIP部署更加高效。 2. Git-RSCLIP模型特性与资源需求 2.1 模型架构特点 Git-RSCLIP基于SigLIP架构,专为遥感图像优化。模型参数量约为1.3GB,支持256x256分辨率的图像输入。在推理过程中,主要消耗资源的环节包括: * 图像编码器的前向计算 * 文本编码器的特征提取 * 相似度计算矩阵运算 * 结果排序和后处理 2.2 典型资源消耗模式 在实际测试中,Git-RSCLIP的典型资源消耗表现为: # 单次推理资源消耗示例 - 显存占用: 1.8-2.2GB (包含模型权重+推理中间结果

By Ne0inhk
手搓STM32H743开源飞控系列教程---(一)飞控调研与方案设计

手搓STM32H743开源飞控系列教程---(一)飞控调研与方案设计

开源飞控所有资料均汇总在:物唯AI智慧文档  ZEEKLOG系列文章 手搓STM32H743开源飞控系列教程---(一)飞控调研与方案设计-ZEEKLOG博客 手搓STM32H743开源飞控系列教程---(二)源码下载,修改引脚定义、编译固件-ZEEKLOG博客 手搓STM32H743开源飞控系列教程---(三)物唯飞控原理图讲解、硬件引脚讲解、一键适配官方固件 手搓STM32H743开源飞控系列教程---(四) 番外~~AI问答知识库上线-ZEEKLOG博客 手搓STM32H743开源飞控系列教程---(五) 飞控IMU与罗盘方向调整-ZEEKLOG博客 手搓STM32H743开源飞控系列教程---(六) PCB被判定为嘉立创存在拆单嫌疑怎么处理?_嘉立创 百元h743-ZEEKLOG博客 手搓STM32H743开源飞控系列教程---(七) 一文讲清所有固件烧录方法!-ZEEKLOG博客 手搓STM32H743开源飞控系列教程---(八) 固件编译视频教程:编译APM固件、编译BF固件 放在最前面 0)首飞视频 F450机架,烧录Ardup

By Ne0inhk

PostHog开源产品分析平台:从零开始快速部署完整指南

PostHog是一款功能强大的开源产品分析平台,为企业提供全面的用户行为洞察、功能标志管理和A/B测试能力。前100字内自然融入核心关键词:PostHog开源产品分析平台、用户行为洞察、功能标志管理、A/B测试能力、快速部署指南、数据可视化分析、会话录制功能、产品分析工具。 【免费下载链接】posthog🦔 PostHog provides open-source product analytics, session recording, feature flagging and A/B testing that you can self-host. 项目地址: https://gitcode.com/GitHub_Trending/po/posthog 为什么选择PostHog?产品核心优势解析 PostHog作为开源产品分析工具,具备以下显著优势: 功能特点商业价值技术优势完全开源免费无需支付高额订阅费用支持私有化部署,数据安全可控一体化解决方案产品分析+会话录制+功能标志基于现代化技术栈,扩展性强数据自主掌控避免第三方数据泄露风险支持Docker容器化部署,

By Ne0inhk