网络安全传输系统-sprint3账号管理子系统设计
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账号管理子系统设计的更多相关文章
- 阶段3-团队合作\项目-网络安全传输系统\sprint3-账号管理子系统设计\第2课-账号管理子系统设计
账号管理子系统的设计 客户端需要登录到服务器,在服务器去查询数据库,进行验证该用户. 打开client.c文件 编译之 把它复制到开发板里面去 这个程序是在本地数据库测试的!!!!!!!!!!!!!! ...
- 阶段3-团队合作\项目-网络安全传输系统\sprint0-产品规划与设计\第2课-产品功能模型设计
- CentOS学习笔记--账号管理与权限配置
Linux 的账号管理与权限配置 管理员的工作中,相当重要的一环就是『管理账号』啦! 使用者标识符: UID 与 GID 虽然我们登陆 Linux 主机的时候,输入的是我们的账号,但是其实 Linux ...
- Linux 账号管理与 ACL 权限配置
要登陆 Linux 系统一定要有账号与口令才行,否则怎么登陆,您说是吧?不过, 不同的使用者应该要拥有不同的权限才行吧?我们还可以透过 user/group 的特殊权限配置, 来规范出不同的群组开发项 ...
- Linux学习之CentOS(十一)-----Linux 账号管理(转)
Linux 账号管理(转) useraddpasswdchageusermoduserdelfingerchfnchshidgroupaddgroupmodgroupdelgpasswd su(帐号切 ...
- 第十四章、Linux 账号管理与 ACL 权限配置
1. Linux 的账号与群组 1.1 使用者标识符: UID 与 GID 1.2 使用者账号:/etc/passwd 文件结构, /etc/shadow 文件结构 1.3 关于群组: /etc/gr ...
- CMA内存管理子系统
转:http://www.wowotech.net/memory_management/cma.html 前言 本文是近期学习CMA模块的一个学习笔记,方便日后遗忘的时候,回来查询以便迅速恢复上下文. ...
- EOS基础全家桶(六)账号管理
简介 本篇我们会学习最基本的账号相关的操作,包括了创建账号和查询,关于账号资源的操作因为必须先部署系统合约,所以我们会留到后面单独写一篇来讲解. 6-EOS基础全家桶(六)账号管理 简介 账号介绍 账 ...
- spring事务管理器设计思想(二)
上文见<spring事务管理器设计思想(一)> 对于第二个问题,涉及到事务的传播级别,定义如下: PROPAGATION_REQUIRED-- 如果当前没有事务,就新建一个事务.这是最常见 ...
随机推荐
- day27 作业
# 学校类 class School: #校区的名字:如"老男孩上海校区" #校区的地址:如"上海虹桥" def __init__(self,s_name,s_ ...
- 解决alert在ios版微信中显示url的问题(重写alert)
为了解决alert在ios版微信中显示url的问题 window.alert = function(name){ var iframe = document.createElement("I ...
- MCU 51-3定时器
51定时/计数器简介 51单片机有2个16位定时器/计数器:定时器0(T0为P3.4)和定时器1(T1为P3.5).这里所说的16位是指定时/计数器内部分别有16位的计数寄存器. 当工作在定时模式时, ...
- java 面向对象(二):JVM内存结构
编译完源程序以后,生成一个或多个字节码文件.我们使用JVM中的类的加载器和解释器对生成的字节码文件进行解释运行.意味着,需要将字节码文件对应的类加载到内存中,涉及到内存解析. <JVM规范> ...
- 数据可视化实例(十): 相关图(matplotlib,pandas)
相关图 https://datawhalechina.github.io/pms50/#/chapter8/chapter8 导入所需要的库 import numpy as np # 导入numpy库 ...
- SpringBoot 接收前端参数的几种方式
昨天和前端小伙伴在联调是碰到了参数接收不到的错误,我在postman上测试接口是正常的,但是与前端对接时就接受不到参数,请求方式都是get,但是问题就在于json 和 form-data 的区别!这 ...
- MySQL数据库---库的操作
MySQL数据库中,以库,表,记录的形式管理所有的数据,安装MySQL数据库的服务器上可以包含多个库,一个库中包含多张表,一张表中包含多条记录.库对应的是文件系统中文件夹的概念,表对应的是文件的概念, ...
- PHP中使用 TUS 协议来实现可恢复文件上传
曾经尝试过用PHP上传大文件吗?想知道您是否可以从上次中断的地方继续上传,而不会在遇到任何中断的情况下再次重新上传整个数据?如果您觉得这个场景很熟悉,请接着往下阅读. 文件上传是我们几乎所有现代Web ...
- 015.Nginx重定向
一 重定向概述 1.1 重定向介绍 重定向(Redirect)指通过各种方法将各种网络请求重新定个方向转到其它位置(如:网页重定向.域名的重定向.路由选择的变化也是对数据报文经由路径的一种重定向). ...
- 性能1.84倍于Ceph!网易数帆Curve分布式存储开源
在上周刚结束的网易数字+大会上 网易数帆宣布: 开源一款名为Curve的高性能分布式存储系统, 性能可达Ceph的1.84倍! 网易副总裁.网易杭州研究院执行院长兼网易数帆总经理汪源: 基础软件的能力 ...