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. python数据处理(八)之展示数据

    1.前言 1.1.不要擅自假定要讲的故事和数据是一致的,要先研究数据,然后讲述数据研究所得 1.2.讲故事是成为领域专家的重要部分. 1.3.将故事方法: a. 确定想要讲的故事 b.无论选择什么方式 ...

  2. 3dTiles 数据规范详解[4.2] i3dm瓦片二进制数据文件结构

    i3dm,即 Instanced 3D Model,实例三维模型的意思. 诸如树木.路灯.路边的垃圾桶.长椅等具有明显 重复 特征的数据.这类数据用得较少(笑,现在都喜欢搞BIM.倾斜摄影.精模.白模 ...

  3. js自定义获取浏览器宽高

    /** * @description js自定义获取浏览器宽高 * * IE8 和 IE8 以下的浏览器不兼容 * window.innerWidth * window.innerHeight * * ...

  4. Cyber Security - Palo Alto Firewall Objects Addresses, Services, and Groups(1)

    Address Objects and Groups Creating address objects. Organizing address objects with address groups ...

  5. 一次HTTP请求服务的完整过程-请求处理过程

    0.DNS域名解析:递归查询.迭代查询 递归查询:客户端向第一个服务器查询,给最终结果 迭代查询:第一个服务器向根查询 1 .建立连接:接收或拒绝连接请求:三次握手的过程 提高HTTP 连接性能: 并 ...

  6. 波士顿动力狗 SPOT 权威购买指北

    两周前 油管科技视频播主 Lew Later 发布了一支 波士顿动力狗子的开箱视频,短短两周的时间内这支视频的播放量就达到了367万, 在Lew Later 近期发布的视频中,这支视频的播放量绝对算得 ...

  7. Jmeter操作MySQL数据库详解

    一.jmeter操作数据库的原理 jmeter不可直接操作数据库,必须通过驱动程序来间接操作,但如果数据库不是在本地而是云服务器上的话就需要通过网络来操作. jmeter通过驱动程序来完成对MySQL ...

  8. 题解 CF917D 【Stranger Trees】

    生成树计数问题用矩阵树定理来考虑. 矩阵树定理求得的为\(\sum\limits_T\prod\limits_{e\in T}v_e\),也就是所有生成树的边权积的和. 这题边是不带权的,应用矩阵树定 ...

  9. websphere8.5配置db2数据源

    websphere8.5配置db2数据源 1. 打开websphere控制台  2.进入websphere变量页面  3. 进入DB2UNIVERSAL_JDBC_DRIVER_NATIVEPATH变 ...

  10. java 成员变量和局部变量的区别

    将对象的存储在数组中会报错 public static void main(String[] args) { ArrayList<Goods> arrayList = new ArrayL ...