SQLite sqlite3_set_authorizer调用例程

SQLite sqlite3_set_authorizer调用例程,第1张

概述sqlite3_set_authorizer 大部分的参考资料,都是写明了注册授权函数这几个简单的字面意思而已,在实际上,可以将一个如下面格式的my_authorizer函数,注册到SQLite语句的解释执行语句当中,并且最先被执行,就像是一个钩子,对sql语句进行一些访问的控制,类似于网络数据包的netfilter。 如下是一个简单的例子: #include <iostream>#includ sqlite3_set_authorizer

大部分的参考资料,都是写明了注册授权函数这几个简单的字面意思而已,在实际上,可以将一个如下面格式的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,constchar*psz4){intnNotPermitCode=*(int*)pszString;if(nNotPermitCode==11){printf("cannotexecutedrop\n");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,&pszErrMsg);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;}
总结

以上是内存溢出为你收集整理的SQLite sqlite3_set_authorizer调用例程全部内容,希望文章能够帮你解决SQLite sqlite3_set_authorizer调用例程所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1179236.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存