摘自:https://www.sqlite.org/c3ref/set_authorizer.html
int sqlite3_set_authorizer(
sqlite3*,
int(*xAuth)(void*,int,const char*,const char*,const char*,const char*),
void *pUserData
);
該函數将注冊一個授權的回調函數到一個指定的資料庫句柄,第一個參數指定了資料庫句柄。當SQL 語句被sqlite3_prepare或者她的變體sqlite3_prepare_v2,sqlite3_prepare16,sqlite3_prepare166_v2等函數編譯的時候,就會調用該回調函數。在不同的編譯點上,執行不同的操作,授權回調函數将被執行,并且傳回目前的操作是否合法(At various points during the compilation process,as logic is beingcreated to perform various actions ,the authorizer callback is invoked to seeif those actions are allowed).如果回調函數傳回SQLITE_OK,表示允許執行該操作,SQLITE_IGNORE表示不允許該指定的操作,但是允許編譯,SQLITE_DENY将會傳回一個錯誤,并且拒絕該操作的執行。如果回調函數傳回其他的值,而不是上面三種類型的其中一種,sqlite3_prepare_v2函數将會觸發一個錯誤資訊(then the sqlite3_prepare_v2() or equivalent call that triggered theauthorizer will fail with an error message.)
SQLITE_OK 允許SQL執行
SQLITE_DENY 拒絕SQL執行
SQLITE_IGNORE 允許SQL執行,但是嘗試讀取記錄集會傳回NULL,嘗試寫入記錄集會被忽略
授權回調函數的第一個參數,将會由sqlite3_set_authorizer的第三個函數設定進去。第二個函數是一個整型的操作碼,指定了哪些操作是被允許的。第三到第六個參數是一個以零為結束符的字元串,這三個參數包含了哪些額外的操作細節是被授權允許的。
本文轉自fengyuzaitu 51CTO部落格,原文連結http://blog.51cto.com/fengyuzaitu/1950465:,如需轉載請自行聯系原作者