SQLite第八课 auth.c授权文件解析

代码剖析

该文件包含了实现sliqte3_set_authorizer函数的代码。对于SQLite库来说,该功能

是可选的。嵌入式系统不需要该功能,可以通过预编译宏-DSQLITE_OMIT_AUTHORIZATION=1

来禁用该选项。实际上在VS的预编译选项中,添加SQLITE_OMIT_AUTHORIZATION即可!!

如果定义了SQLITE_OMIT_AUTHORIZATION宏,就会忽略该文件的所有代码

如下介绍两个重量级的函数:

int sqlite3_set_authorizer

(

sqlite3 *db,

int(*xAuth)(void*,int,const char*,const char*,const char*,const char*),

void *pArg

)

设置或者清空访问授权函数

sqlite3_set_authorizer函数会将注册进来的授权函数的指针,传递给

数据库的句柄结构体sqlite3*db,并且也将该函数的第三个参数保存到句柄当中

千万不要想当然,句柄就是一个指针,可以指向一个结构体的指针。

实际上在这里有一个值得考虑的问题:如何防止死锁,一个锁她的最大范围

如何控制,在什么地方才需要真正的加锁!!

学习如何使用C语言,实现面向对象的编程思想,如何组织函数的处理结构

第三和第四个参数分别是当前正在访问的表名和列名,认证函数只能返回SQLITE_OK,SQLITE_DENY

SQLITE_IGNORE.如果返回SQLITE_OK,表示允许执行访问操作。SQLITE_DENY意味着SQL语句不会被执

行,sqlite3_exec函数将返回一个错误信息,SQLITE_IGNORE意味着SQL语句将被解析,但是尝试读

取,将返回空集合,尝试写将被忽略!!

/*

该函数被SQLite调用去执行注册进来的授权函数

根据给定的参数执行一个认证检测。返回值可以是SQLITE_OK或者SQLITE_IGNORE或者

SQLITE_DENY,如果返回SQLITE_DENY,pParse会携带修改的错误信息返回。

*/

int sqlite3AuthCheck(

Parse *pParse,

int code,

const char *zArg1,

const char *zArg2,

const char *zArg3

){

sqlite3 *db = pParse->db;

int rc;

/* Don‘t do any authorization checks if the database is initialising

** or if the parser is being invoked from within sqlite3_declare_vtab.

*/

if( db->init.busy || IN_DECLARE_VTAB ){

return SQLITE_OK;

}

if( db->xAuth==0 ){

return SQLITE_OK;

}

rc = db->xAuth(db->pAuthArg, code, zArg1, zArg2, zArg3, pParse->zAuthContext

#ifdef SQLITE_USER_AUTHENTICATION

,db->auth.zAuthUser

#endif

);

if( rc==SQLITE_DENY ){

sqlite3ErrorMsg(pParse, "not authorized");

pParse->rc = SQLITE_AUTH;

}else if( rc!=SQLITE_OK && rc!=SQLITE_IGNORE ){

rc = SQLITE_DENY;

sqliteAuthBadReturnCode(pParse);

}

return rc;

}

如下的函数并没有知道调用的过程:

/*如下的函数例程,并不知道在什么地方被调用,并且不清楚认证信息是

如何通过函数进行传递的,从哪里来,并且到哪里去

*/

/*

认证信息进栈。该例程被调用后,认证回调函数的zArg3参数被赋值为zContext,

直到她被弹出。如果pParse为空,该例程取消操作返回。

*/

void sqlite3AuthContextPush

/*

弹出之前通过sqlite3AuthContextPush函数进栈的认证信息

*/

void sqlite3AuthContextPop(AuthContext *pContext)

时间: 2024-10-07 07:09:36

SQLite第八课 auth.c授权文件解析的相关文章

第八课-08_04_磁盘及文件系统管理详解之二

一.设备文件--作为设备的访问入口块设备 -b开头--按块位单位,可以随机访问--硬盘字符设备-c开头-字符位单位,线性设备--键盘1)字符设备 日期 前面的2个数,4, 32----4表示主设备号---标识设备类型 -major number32表示次设备号--标识同一类型中的不同设备--minor number2)创建设备文件命令--mknodmknod option name(path) type(b,c,p) major/minormknod -m MODE 文件权限mknod -m 6

NeHe OpenGL教程 第三十八课:资源文件

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第三十八课:资源文件 从资源文件中载入图像: 如何把图像数据保存到*.exe程序中,使用Windows的资源文件吧,它既简单又实用. 欢迎来到NeHe教程第38课.离上节课的写作已经有些时日了,加上写了一整天的code,也许笔头已经

【C++探索之旅】第一部分第八课:传值引用,文件源头

内容简介 1.第一部分第八课:传值引用,文件源头 2.第一部分第九课预告:数组威武,动静合一 传值引用,文件源头 这一课的标题有点怪.其实是由这一课的几个重点内容结合起来取的名,慢慢学习就知道啦. 上一课<[C++探索之旅]第一部分第七课:函数效应,分而治之>中,我们初步认识了函数. 不过不要高兴得太早,你以为函数就这样离你远去了嘛?怎么可能,函数将伴随一生好吗,只要你继续编程的话.哈哈,所以你是跑不掉了~ [小编,都跟你签了协议了,没吃药不要随便出来溜达] 这一课我们就继续深入学习与函数相关

第八课 网络通信

unix_c_08.txt================第八课 网络通信================一.基本概念------------1. ISO/OSI七层网络协议模型~~~~~~~~~~~~~~~~~~~~~~~~~~+------------+--------------+ ---| 应用层 | Application | ^+------------+--------------+ || 表示层 | Presentation | 高层+------------+---------

NeHe OpenGL教程 第二十八课:贝塞尔曲面

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第二十八课:贝塞尔曲面 贝塞尔曲面: 这是一课关于数学运算的,没有别的内容了.来,有信心就看看它吧. 贝塞尔曲面 作者: David Nikdel ( [email protected] ) 这篇教程旨在介绍贝塞尔曲面,希望有比我更

【Linux探索之旅】第二部分第八课:RTFM 阅读那该死的手册

内容简介 1.第二部分第八课:RTFM 阅读那该死的手册 2.第二部分第九课预告:查找文件,无所遁形 RTFM 阅读那该死的手册 今天这一课也会很轻松. 一般Windows的用户不太习惯看使用手册.有些Windows下的软件下载后是带有使用手册的,但是谁会花时间看呢? 在Linux下,阅读手册应该成为一个反射动作,一个自然而然的反应.虽说一开始要我们去看手册会有点让人生畏,但是我们学习各种Linux命令的使用方法的最好去处就是手册了. 我们这个系列教程也绝不能和手册相比,因为我们的教程里对于每一

【C语言探索之旅】 第一部分第八课:第一个C语言小游戏

? 内容简介 1.课程大纲 2.第一部分第八课:第一个C语言小游戏 3.第一部分第九课预告: 函数 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏. C语言编程基础知识 什么是编程? 工欲善其事,必先利其器 你的第一个程序 变量的世界 运算那点事 条件表达式 循环语句 实战:第一个C语言小游戏 函数 练习题 习作:完善第一个C语言小游戏 C语言高级技术 模块化编程 进击的指针,C语言王牌 数组 字符串 预处理 创建你自己的变量类型 文

BeagleBone Black板第八课:建立Eclipse编程环境

BBB板第八课:建立Eclipse编程环境 最近新建了一个编程环境,感觉到非常方便,分享给大家.之前除了在BBB板远程桌面直接编写shell脚本或C程序外,通过Debain 7.5系统下使用编辑软件也试过,写完程序还是转存到BBB板编译,反正觉得挺麻烦.不熟悉linux是个原因,但没汉化的软件更是个问题.最后重新回来熟悉的XP的环境,根据网上一些点子,安装Eclipse C/C++,没想到用过后感觉非常好,起码现阶段是认可.特别是对我这种初学者来说,真的觉得方便.好用. 我的基本环境是Windo

【C语言探索之旅】 第二部分第八课:动态分配

内容简介 1.课程大纲 2.第二部分第八课: 动态分配 3.第二部分第九课预告: 实战"悬挂小人"游戏 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏. C语言编程基础知识 什么是编程? 工欲善其事,必先利其器 你的第一个程序 变量的世界 运算那点事 条件表达式 循环语句 实战:第一个C语言小游戏 函数 练习题 习作:完善第一个C语言小游戏 C语言高级技术 模块化编程 进击的指针,C语言王牌 数组 字符串 预处理 创建你自己