跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
SQL

MySQL 普通用户创建、权限管控及 C/C++ 对接实战

MySQL 权限管理与 C/C++ 客户端集成实战指南。涵盖普通用户创建、权限分配与回收、本地及远程连接配置,以及通过 libmysqlclient 库实现 C/C++ 程序对数据库的初始化、连接、查询与结果集处理。包含环境搭建、关键 API 解析及完整代码示例,解决常见登录失败与接口调用问题。

月亮邮递员发布于 2026/3/16更新于 2026/7/3032 浏览
MySQL 普通用户创建、权限管控及 C/C++ 对接实战

MySQL 普通用户创建与 C/C++ 集成指南

在数据库开发与运维中,权限管控是保障安全的基础。本地连接、远程访问配置以及 C/C++ 程序的对接调用,则是打通'数据库 - 应用'链路的核心环节。开发者常遇到用户登录失败、远程拒绝或接口报错等问题,本文从实战出发,拆解 MySQL 普通用户的创建配置、访问设置及 C/C++ 完整对接流程。

一、普通用户管理

1. 查看用户表

user 表属于 mysql 系统库,需先切换上下文:

use mysql;

查询账户信息:

select host, user, authentication_string from user;

[图片]

2. 创建普通用户

注意:本地登录主机填 localhost,公网访问可用 %。

create user 'username'@'host' identified by 'password';

3. 删除用户

指定主机名(如 localhost、% 或具体 IP):

drop user 'username'@'host';

4. 修改密码

root 账号修改指定用户密码:

set password for 'username'@'host'=password('new_password');

注:普通用户通常无法直接通过 SQL 修改自身密码,建议由管理员操作或使用 ALTER USER 语句(视版本而定)。

5. 权限分配

基本权限指令对应 SQL 关键字。例如授予所有库的读写权限:

grant all privileges on *.* to 'username'@'host';
  • *.*:所有数据库的所有对象
  • db.*:指定数据库的所有对象

刷新权限生效:

flush privileges;

验证新用户登录授权后的数据库和表:

[图片]

6. 回收权限

revoke all privileges on *.* from 'username'@'host';

二、C/C++ 客户端集成

原理相同,以下以 C 语言为例。

1. 环境准备

Ubuntu 下可直接安装开发包:

sudo apt update && sudo apt install libmysqlclient-dev

若需自行编译,可从官网下载源码导入。

2. 文件检查

安装后头文件位于 /usr/include/mysql,包含 mysql.h。

[图片]

3. 库验证

使用 mysql_get_client_info() 函数检验库是否加载成功。

注意:编译时需指定头文件和库文件路径。

三、核心 API 解析

1. 初始化

MYSQL *my = mysql_init(NULL);
if (my == NULL) {
    printf("Init failed: %s\n", mysql_error(my));
}

2. 设置字符集

mysql_options(my, MYSQL_SET_CHARSET_NAME, "utf8mb4");

3. 连接数据库

mysql_real_connect(my, "localhost", "username", "password", "dbname", 3306, NULL, 0);
参数含义说明
mysql已初始化的句柄mysql_init() 返回值
host服务器地址localhost 或 IP
user用户名你的登录账号
passwd密码对应密码
db默认库可填 NULL
port端口默认 3306
unix_socket套接字本地填 NULL
client_flag标志位默认 0

[图片]

4. 关闭连接

mysql_close(my);

5. 执行指令

增删改查

mysql_query() 用于执行非查询类语句。

int mysql_query(MYSQL *mysql, const char *stmt_str);
  • 返回 0 表示成功,非 0 为失败。

示例:插入数据并重新编译执行。

[图片]

[图片]

结果验证:

[图片]

获取结果集

SELECT 语句需获取结果集指针。

MYSQL_RES *result = mysql_store_result(my);
  • 使用完毕后需调用 mysql_free_result(result) 释放资源。

获取行数与列数:

my_ulonglong row_count = mysql_num_rows(result);
unsigned int col_count = mysql_num_fields(result);

获取列元数据:

MYSQL_FIELD *fields = mysql_fetch_fields(result);
  • name:列名
  • type:数据类型
  • length:定义长度

[图片]

6. 完整代码示例

#include <stdio.h>
#include <mysql.h>

int main() {
    // 初始化
    MYSQL *my = mysql_init(NULL);
    if (my == NULL) {
        printf("Error: %s\n", mysql_error(my));
        return 1;
    }

    // 设置字符集
    mysql_options(my, MYSQL_SET_CHARSET_NAME, "utf8mb4");

    // 连接
    if (!mysql_real_connect(my, "localhost", "newuser", "123456", "hello", 3306, NULL, 0)) {
        printf("Connection failed: %s\n", mysql_error(my));
        mysql_close(my);
        return 1;
    }

    // 执行查询
    const char *ptr = "select * from student";
    if (mysql_query(my, ptr)) {
        printf("Query failed: %s\n", mysql_error(my));
        mysql_close(my);
        return 1;
    }

    // 获取结果集
    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");

    // 打印数据
    MYSQL_ROW row;
    while ((row = mysql_fetch_row(result))) {
        for (unsigned int i = 0; i < col_count; i++) {
            printf("%s\t", row[i] ? row[i] : "NULL");
        }
        printf("\n");
    }

    // 清理资源
    mysql_free_result(result);
    mysql_close(my);

    return 0;
}

通过以上步骤,即可完成 MySQL 权限管理与 C/C++ 应用的完整对接。实际开发中请根据网络环境和安全策略调整连接参数。

目录

  1. MySQL 普通用户创建与 C/C++ 集成指南
  2. 一、普通用户管理
  3. 1. 查看用户表
  4. 2. 创建普通用户
  5. 3. 删除用户
  6. 4. 修改密码
  7. 5. 权限分配
  8. 6. 回收权限
  9. 二、C/C++ 客户端集成
  10. 1. 环境准备
  11. 2. 文件检查
  12. 3. 库验证
  13. 三、核心 API 解析
  14. 1. 初始化
  15. 2. 设置字符集
  16. 3. 连接数据库
  17. 4. 关闭连接
  18. 5. 执行指令
  19. 增删改查
  20. 获取结果集
  21. 6. 完整代码示例
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • HDFS 常用命令与 Java API 编程实践
  • 纯 B/S 架构智慧 PACS/RIS 系统设计与实现
  • Python 使用 Ksycopg2 驱动连接和操作 Kingbase 数据库
  • JiuwenClaw AI 智能体实战:任务规划与上下文管理
  • 开源硬件与Python融合:青少年科技创新教育实践指南
  • 基于 Selenium 的网页自动化抢购脚本实现
  • Java 解析磁力链 (Magnet URI) 完整指南
  • Python 满屏无限弹窗表白脚本实现
  • Python 网页自动化实战:Selenium 与 Requests 应用
  • OpenClaw 技能精选:打造本地 AI 助手的超级插件市场
  • OpenCode 开源 AI 编程代理全维度解析
  • 网络安全入门:黑客必备技术与知识体系
  • HTTP 请求方式详解:GET、POST 及其他常用方法
  • Flutter 使用 web3dart 连接以太坊构建 DApp 及 OpenHarmony 适配实战
  • WorkBuddy 接入 QQ 机器人配置指南
  • Visual Studio 2026 Insider C++ 项目属性推荐配置
  • Jetson 部署 OpenClaw 接入飞书机器人实现本地 AI 助手
  • AI 辅助 Python 毕业设计项目架构搭建与实现
  • AI Agent 核心在于流程设计:Harness 才是决胜关键
  • 基于 DeepSeek 和 Cursor 构建智能代码审查工具实战

相关免费在线工具

  • SQL 美化和格式化

    在线格式化和美化您的 SQL 查询(它支持各种 SQL 方言)。 在线工具,SQL 美化和格式化在线工具,online

  • SQL转CSV/JSON/XML

    解析 INSERT 等受限 SQL,导出为 CSV、JSON、XML、YAML、HTML 表格(见页内语法说明)。 在线工具,SQL转CSV/JSON/XML在线工具,online

  • CSV 工具包

    CSV 与 JSON/XML/HTML/TSV/SQL 等互转,单页多 Tab。 在线工具,CSV 工具包在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online