《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

JavaScript Window Location

JavaScript Window Location 引言 在Web开发中,window.location 对象是浏览器窗口中的一个重要属性,它提供了访问当前URL的接口。理解并正确使用 window.location 对象对于开发动态网页和应用程序至关重要。本文将详细介绍 window.location 对象的属性、方法以及如何在JavaScript中操作它们。 window.location 对象概述 window.location 是一个对象,包含了浏览器当前加载页面的URL信息。它允许开发者读取和修改URL,从而实现页面跳转、获取查询参数等功能。 属性 以下是 window.location 对象的一些常用属性: * href: 返回当前页面的完整URL。 * protocol: 返回当前页面的协议(例如:http, https)。 * host: 返回当前页面的域名和端口号。 * hostname: 返回当前页面的域名。 * port: 返回当前页面的端口号。 * pathname: 返回当前页面的路径。 * search: 返回当前页面的查询

By Ne0inhk
别再说AI是“人工智障”!2026年最火的Agent Skills,是时候让它帮你真干活了

别再说AI是“人工智障”!2026年最火的Agent Skills,是时候让它帮你真干活了

> 当Claude创建一张PPT的时间从20分钟缩短到2分钟,不是它变聪明了,而是因为你给它装上了“专家技能包”。 “帮我订张明天去北京的票。”在一个平常的周一早晨,你对AI助理说道。如果没有接入特定技能,常见的AI可能只会回答“抱歉,我无法执行此类操作”。 但当AI加载了“订票Skill”,它会立刻执行一连串动作:联网查询航班、比价、调用支付接口,最后给出结果:“明天上午10点国航CA1234航班最合适,票价800元,需要现在下单吗?” 这种从“只会说”到**真正能办事**的能力飞跃,正是2026年AI圈讨论最热烈的Agent Skills技术。它让通用的AI大脑,通过加载不同的“技能包”,瞬间变身特定领域的专家。 --- ## 01 傻瓜式上手:Agent Skills究竟是什么? 想象一下,你刚刚雇佣了一位极其聪明的实习生(Claude),他懂各种通用知识,但完全不了解你公司的具体工作流程和规范。 Agent Skills就是给这位聪明实习生准备的**标准化入职手册和工作指南**。它不是一个复杂的编程项目,而是一个文件夹,包含一个核心的SKILL.md文档,

By Ne0inhk
目前最好用的AI写小说工具是什么?这5款写小说软件,一定要收藏

目前最好用的AI写小说工具是什么?这5款写小说软件,一定要收藏

先说说写小说,最怕什么? 卡文、没灵感、设定空洞、写不出人物性格……更别说那条“从0到签约”的路有多难走。 我之前就是个典型“写几千字就废稿”的人,直到开始尝试一些AI写小说工具,才逐渐把写小说这件事,变得像搭积木一样简单。 这篇文章不打鸡血、不讲玄学,我会测评5款我真实用过的写小说的软件,最后也会给不同写作需求的朋友推荐适合的工具组合,踩雷经验照搬都给你避了。 1.笔灵AI写小说:结构控最爱的“编辑级大纲机” 当时是因为大纲怎么都理不顺,随手搜到笔灵,就想试试。 没想到它不是那种泛用型的聊天AI,而是专门为小说创作设计的,不像有些工具啥都能聊但没重点,它是真的只管你怎么把小说写好。 工具传送门:https://ibiling.cn/novel-workbench (复制到浏览器打开体验更佳) 我最常用的是它的【小说大纲生成器】—— 这个功能能一次性把设定、起承转合、冲突推进、审稿要点都列得明明白白。 填完人物和剧情信息,直接生成一版“像是编辑改过”的大纲,有逻辑、有亮点,连“

By Ne0inhk
Cursor vs Claude Code:开发者该如何选择 AI 编程工具?

Cursor vs Claude Code:开发者该如何选择 AI 编程工具?

在 AI 编程工具爆发的 2026 年,Cursor 和 Claude Code 成为开发者热议的两大主力。它们都深度集成大模型能力,但设计理念、适用场景和用户体验却大不相同。本文将为你拆解两者的核心差异,助你做出明智选择。 🧩 1. 产品定位:编辑器 vs 智能层 Cursor:一个“AI 原生”的代码编辑器 * 基于 VS Code 构建,但进行了深度改造。 * 核心理念:整个 IDE 围绕 AI 交互设计,支持 /edit、Cmd+K 等快捷指令。 * 内置聊天侧边栏,可直接操作文件、运行命令、生成测试。 * 支持多文件上下文理解(通过本地索引)。 Claude Code: 终端优先的工具

By Ne0inhk