加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

SQLite第九课 sqlite3_set_authorizer案例

发布时间:2020-12-12 19:19:12 所属栏目:百科 来源:网络整理
导读:可以将一个如下面格式的my_authorizer函数,注册到SQLite语句的解释执行语句当中,并且最先被执行,就像是一个钩子,对sql语句进行一些访问的控制,类似于网络数据包的netfilter。 #includeiostream #include"sqlite/sqlite3.h" using namespace std; /* 该

可以将一个如下面格式的my_authorizer函数,注册到SQLite语句的解释执行语句当中,并且最先被执行,就像是一个钩子,对sql语句进行一些访问的控制,类似于网络数据包的netfilter。

#include<iostream>

#include"sqlite/sqlite3.h"

usingnamespacestd;

/*

该注册的回调函数,禁止用户删除任何的表,实际上,第三个参数

会传递进来当前操作的表的名称,可以通过和该值进行匹配,是否

需要对该表进行操作,当然由于pszString是一个无符号整型,如果

有多个参数想传递进来,可以设置sqlite3_set_authorizer的第三个

参数为结构体,然后通过将pszString进行类型的强制转换,返回

SQLITE_OK,表示继续执行,返回SQLITE_DENY表示拒绝执行

*/

intmy_authorizer(void*pszString,

intnCode,/*当前SQL解析模块正在执行的操作码*/

constchar*psz1,/*由SQL解析模块传递进来当前操作的数据库表,由操作码决定是否为空*/

constchar*psz2,

constchar*psz3,sans-serif;">char*psz4)

{

intnNotPermitCode=*(int*)pszString;

if(nNotPermitCode==11)

{

printf("cannotexecutedropn");

returnSQLITE_DENY;

}

returnSQLITE_OK;

}

intmain()

{

intrc=0;

sqlite3*db=NULL;

char*pdbName="test0.db";

char*pszErrMsg=NULL;

rc=sqlite3_open_v2(pdbName,&db,SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE,NULL);

char*pszCreateTb1="createvirtualtablegeo_test1usingrtree_i32(id,minx,maxx)";

rc=sqlite3_exec(db,pszCreateTb1,&pszErrMsg);

char*pszInsertsql1="insertintogeo_test1values(1,400,400)";

rc=sqlite3_exec(db,pszInsertsql1,sans-serif;">

char*pszDropTable="droptablegeo_test1";

/*

授权动作编码(AuthorizerActionCodes)

摘自:https://www.sqlite.org/c3ref/c_alter_table.html

每一种授权操作码都会传递不同的参数给授权注册函数,详细参考

网址。11是删除数据库表的授权操作码,当调用授权注册函数的时候

第三个字符串将获得当前被操作的表的名称。

*/

intnNotPermitCode=11;

/*

第三个参数是传递给授权注册函数的参数值

*/

sqlite3_set_authorizer(db,my_authorizer,&nNotPermitCode);

sqlite3_stmt*statement;

rc=sqlite3_prepare_v2(db,pszDropTable,-1,&statement,NULL);

/*

单步调试到perr的错误信息:noauthored,表示无权操作

*/

constchar*pszErr=sqlite3_errmsg(db);

sqlite3_close(db);

return0;

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读