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 split分割字符串

    s = input(); str = s.split("-") print("{}+{}".format(str[0],str[-1]))

  2. python面试题六: 剑指offer

    面试题3 二维数组中的查找 LeetCode题目:二维数组中,每行从左到右递增,每列从上到下递增,给出一个数,判断它是否在数组中思路:从左下角或者右上角开始比较 def find_integer(ma ...

  3. Odoo13之在tree视图左上角添加自定义按钮

    前言 首先展示效果图,如下图所示,在资产设备模块tree视图的左上角添加了一个同步资产的按钮. 要完成按钮的添加,分为四步,分别是: 1.编写xml文件,找到相关模型tree视图,并给模型tree视图 ...

  4. css换行后缩进,css缩进技巧

    一般情况下像下图这样需要缩进的,一般都会外面一个div里面两块需要两个div然后用定位或者flex.table.浮动后设置宽度等来实现 已知宽度的情况下上面列的方法都适用 不知宽度的情况下可以用fle ...

  5. kubernetes系列(十六) - Helm安装和入门

    1. helm简介 1.1 为什么需要helm 1.2 helm中几个概念 1.3 helm用途 2. helm安装 3. helm的基本使用 3.1 安装chart仓库里面的chart 3.2 创建 ...

  6. 使用 JS 开发 Github Actions 实现自动部署前后台项目到自己服务器

    不想看前面这么多废话的可以直接跳到具体实现 Github Actions 是什么? 说到 Github Actions 不得不提一下. 持续集成(continuous integration):高质量 ...

  7. Interllij Idea 环境必要配置

    必要设置:https://blog.csdn.net/weixin_43378248/article/details/84673406 1. @Autowired 取消错误提示 (1)选择file - ...

  8. Ethical Hacking - NETWORK PENETRATION TESTING(19)

    MITM-DNS Spoofing DNS Spoofing allows us to redirect any request to a certain domain to another doma ...

  9. antd实战:表单上传,文件列表的过滤与限制。

    用表单上传组件最痛苦的地方是: 他的诸多行为与纯上传组件不一样,而表单的文档关于这一块基本上没有提,只能自己试. 比如我想做一个上传前的拦截. beforeUpload: (file, fileLis ...

  10. 3.新手建站教程系列之认识WordPress和第一篇文章

    上一期咱已经把本地环境和wp网站给搭建出来了,接下来就是来认识这个程序了.进入网站后台,地址为你的网址/wp-admin 后台名字叫做仪表盘,首页是一个信息合集区域,上面会显示有多少文章,多少页面以及 ...