part1:sqlite嵌入式数据库移植

  1、数据库系统构成:访问数据库应用-->管理数据库系统-->数据库存储(自上而下)

  2、数据库中数据以表的形式而存在。表与表之间可能存在关联关系(SQL结构化查询语言,用于访问数据库中的数据)

  3、数据库访问语言SQL  

创建表 creat table stu name varchar(),number small(int)  表名 变量-类型
向表中插入数据 insert into stu values('CC',)                   表名 name-number
表中查询数据 select * form stu
表中删除数据 delete form stu where 范围

  4、数据库sqlite移植

    step1:解压新建_install目录,且配置./configuer --host=arm-linux- --prefix=${PWD}/_install

    step2:编译make、make install--->产生Makefile文件

    step3:将产生的库函数全部复制到/rootfs/lib/目录下

  5、数据库访问应用程序

    step1:编译test_db.c文件

      arm-linux-gcc test_db.c -I ./sqlite-autoconf-3070800/_install/include/ -L ./sqlite-autoconf-3070800/_install/lib/ -lsqlite3 -o test_db

    step2:复制可执行文件test_db到根文件系统中

    step3:在开发板上执行命令:

       #test_db sql.db "create table stu (name varchar(),number small(int) )";创建sql_db数据库文件

       #test_db sql.db "insert into stu values ( 'CC'', )"; 向数据可中插入数据

       #test_db sql.db "insert into stu values ( 'HJH', )";

       #test_db sql.db "select *from stu;" 提取表里信息

  一个简单的数据库应用程序

#include <stdio.h>
#include <sqlite3.h> static int callback(void *NotUsed, int argc, char **argv, char **azColName)
{
int i;
for(i=; i<argc; i++)
{ //azColName[i]列名,argv[i]列的值
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
}
printf("\n");
return ; } int main(int argc, char **argv)
{
sqlite3 *db;
char *zErrMsg = ;
int rc; if( argc!= )
{
fprintf(stderr, "Usage: %s DATABASE SQL-STATEMENT\n", argv[]);
} /*打开数据库*/
rc = sqlite3_open(argv[], &db); if( rc )
{
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
} /*执行sql语言*/
rc = sqlite3_exec(db, argv[], callback, , &zErrMsg); if( rc!=SQLITE_OK )
{
fprintf(stderr, "SQL error: %s\n", zErrMsg);
}
/*关闭数据库*/
sqlite3_close(db);
return ;
}

part2:账号管理子系统设计

   数据库账号管理子系统,用于管理客户端账号,非允许客户禁止登录服务器。

   流程:1、创建数据库文件sql.db(存储用于信息),存储与客户端目录下;

      2、客户端程序内加入登录验证程序,查询sql_db信息表中是否匹配,错误exit(0)退出。

int login()
{
char username[];
char passwd[];
sqlite3* db; int success;
char sql[];//需要执行sql语句的字符串
//1、通知输入用户名和密码
printf("User name:"); scanf("%s", username);
printf("Password:"); scanf("%s", passwd);
//2、根据用户名,从数据库提取正确的密码
//从tb0表查询密码,where name='%s'从用户名对应的位置查询密码
sprintf(sql, "select passwd from tb0 where name='%s';", username);
sqlite3_open("sql.db", &db); /*a.打开数据库*/
// callback回调函数打印符合条件的密码
sqlite3_exec(db, sql, callback, , NULL); /*b.执行sql语言*/
sqlite3_close(db); /*c.关闭数据库*/
//3、比较用户名输入的密码和数据库提取出的密码,以决定是否登录
success = strcmp(passwd, passwd_d);//passwd用户输入的,passwd_d根据用户名在数据库中查询到的
return success; //成功返回0
}

  编译:分别调用openssl加密传输文件,sqlite头文件,openssl和sqlite的库文件 -lssl -lcrypto -lsqlite3

  

  在开发板上新建数据,运行客户端程序,./client 192.168.19.125,安装要求输入账号密码,成功则登录SSL传输

    

网络安全传输系统-sprint3账号管理子系统设计的更多相关文章

  1. 阶段3-团队合作\项目-网络安全传输系统\sprint3-账号管理子系统设计\第2课-账号管理子系统设计

    账号管理子系统的设计 客户端需要登录到服务器,在服务器去查询数据库,进行验证该用户. 打开client.c文件 编译之 把它复制到开发板里面去 这个程序是在本地数据库测试的!!!!!!!!!!!!!! ...

  2. 阶段3-团队合作\项目-网络安全传输系统\sprint0-产品规划与设计\第2课-产品功能模型设计

  3. CentOS学习笔记--账号管理与权限配置

    Linux 的账号管理与权限配置 管理员的工作中,相当重要的一环就是『管理账号』啦! 使用者标识符: UID 与 GID 虽然我们登陆 Linux 主机的时候,输入的是我们的账号,但是其实 Linux ...

  4. Linux 账号管理与 ACL 权限配置

    要登陆 Linux 系统一定要有账号与口令才行,否则怎么登陆,您说是吧?不过, 不同的使用者应该要拥有不同的权限才行吧?我们还可以透过 user/group 的特殊权限配置, 来规范出不同的群组开发项 ...

  5. Linux学习之CentOS(十一)-----Linux 账号管理(转)

    Linux 账号管理(转) useraddpasswdchageusermoduserdelfingerchfnchshidgroupaddgroupmodgroupdelgpasswd su(帐号切 ...

  6. 第十四章、Linux 账号管理与 ACL 权限配置

    1. Linux 的账号与群组 1.1 使用者标识符: UID 与 GID 1.2 使用者账号:/etc/passwd 文件结构, /etc/shadow 文件结构 1.3 关于群组: /etc/gr ...

  7. CMA内存管理子系统

    转:http://www.wowotech.net/memory_management/cma.html 前言 本文是近期学习CMA模块的一个学习笔记,方便日后遗忘的时候,回来查询以便迅速恢复上下文. ...

  8. EOS基础全家桶(六)账号管理

    简介 本篇我们会学习最基本的账号相关的操作,包括了创建账号和查询,关于账号资源的操作因为必须先部署系统合约,所以我们会留到后面单独写一篇来讲解. 6-EOS基础全家桶(六)账号管理 简介 账号介绍 账 ...

  9. spring事务管理器设计思想(二)

    上文见<spring事务管理器设计思想(一)> 对于第二个问题,涉及到事务的传播级别,定义如下: PROPAGATION_REQUIRED-- 如果当前没有事务,就新建一个事务.这是最常见 ...

随机推荐

  1. js代码段

    1.数组去重 Array.prototype.DuplicateRemoval = function(){ let res = [this[0]]; for(let i = 1; i < thi ...

  2. 数据可视化之powerBI基础(六)Power BI的“问答”,你用过吗?

    https://zhuanlan.zhihu.com/p/64412190 ​本文来自星球嘉宾"海艳"的分享,关于Power BI的问答功能以及各项细节,海艳详细为大家逐一介绍,下 ...

  3. 数据可视化之DAX篇(二十七)半累加度量,在Power BI 中轻松处理

    https://zhuanlan.zhihu.com/p/96823622 ​开始半累加的计算之前,我们先看看什么是累加.半累加以及不可累加数据. 在含有大量行的数据表中,各种数据处理语言,包括DAX ...

  4. Python 之 Restful API设计规范

    理解RESTful架构 Restful API设计指南 理解RESTful架构 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式 ...

  5. unity-Timeline实践

    前言 建议入门方式(基本的手册知识了解之后):官方Demo TimelineInputDemo 自定义轨迹 CustomTrack Signal 标记 创建Emitter 和 Receiver 引用: ...

  6. Java常用API(Math类)

    Java常用API(Math类) Math类的作用 java.lang.Math 类包含用于执行基本数学运算的方法,如初等指数.对数.平方根和三角函数.类似这样的工具 类,其所有方法均为静态方法,并且 ...

  7. Ubuntu构建Docker私有仓库(Repository) 配置过程笔记

    一.准备: 1.服务器(或者虚拟机2台,我的服务环境[  阿里云服务器-Ubuntu 1804 +百度云-Ubuntu 1604]) 2.有效镜像(我这里以上一篇随笔镜像作为有效镜像https://w ...

  8. 题解 洛谷 P4177 【[CEOI2008]order】

    进行分析后,发现最大收益可以转化为最小代价,那么我们就可以考虑用最小割来解决这道题. 先算出总收益\(sum\),总收益减去最小代价即为答案. 然后考虑如何建图,如何建立最小割的模型. 发现一个任务最 ...

  9. 篮球30S定时器设计

    一.设计介绍 本设计采用74LS192作为计数器,74LS192具有同步加减计数功能,可以通过引脚电平对它设置达到清零重置的目的,可以达到对计数器清零的功能,使用两片级联74LS192分别显示十位和个 ...

  10. 记一次css字体反爬

    前段时间在看css反爬的时候,发现很多网站都做了css反爬,比如,设置字体反爬的(58同城租房版块,实习僧招聘https://www.shixiseng.com/等)设置雪碧图反爬的(自如租房http ...