勇芳软件工作室.汉化:  CSQLite Classes > CSQLiteConnection Class > ISQLiteConnection Interface >

SetAuthorizer Method

Previous pageReturn to chapter overviewNext page

描述

 

注册具有特定数据库连接的授权器回调。

 

PB语法

 

METHOD SetAuthorizer ( _

BYVAL pAuthCallback AS DWORD _

BYVAL pData AS DWORD _

) AS LONG

 

参数

 

pAuthCallBack

 

[in]指向回调函数的指针。

 

pData

 

[in]作为唯一参数传递给回调函数的数据。

 

返回值

 

如果成功返回SQLITE_OK,否则返回错误代码。

 

备注

 

准备PrepareW编译的SQL语句调用授权程序回调。在编译过程中的各个不同点,由于正在创建逻辑以执行各种操作,调用授权程序回调以查看是否允许这些操作。授权器回调应返回SQLITE_OK以允许操作,SQLITE_IGNORE不允许特定操作,但允许SQL语句继续编译,否则SQLITE_DENY会导致整个SQL语句被拒绝并出现错误。如果授权器回调函数返回除SQLITE_IGNORE,SQLITE_OK或SQLITE_DENY之外的任何值,则触发授权器的准备或等效调用将失败,并显示错误消息

 

当回调函数返回SQLITE_OK时,这意味着请求的操作确定。当回调返回SQLITE_DENY时,触发授权者的准备或等效调用将失败,并显示一条错误消息,说明访问被拒绝。

 

授权器回调的第一个参数是SetAuthorizer接口的第三个参数的副本。回调的第二个参数是一个整数操作代码,指定要授权的特定操作。回调的第三到第六个参数是零终止的字符串,其中包含有关要授权的操作的其他详细信息。

 

如果操作代码为SQLITE_READ,并且回调函数返回SQLITE_IGNORE,则准备好的语句语句被构造为替换NULL值,代替已经返回SQLITE_OK时已被读取的表列。SQLITE_IGNORE返回可用于拒绝不受信任的用户访问表的各个列。如果操作代码为SQLITE_DELETE,并且回调返回SQLITE_IGNORE,那么DELETE操作继续进行,但是截断优化被禁用,并且所有行都被单独删除。

 

从不受信任的源准备SQL语句时,将使用授权器,以确保SQL语句不会尝试访问不允许查看的数据,也不会尝试执行损坏数据库的恶意语句。例如,应用程序可能允许用户输入任意SQL查询以供数据库进行评估。但应用程序不希望用户能够对数据库进行任意更改。然后,在用户输入的SQL准备不允许除SELECT语句之外的所有内容的情况下,可以将授权器置于原位。

 

需要从不受信任来源处理SQL的应用程序也可能会考虑使用限制降低资源限制,并使用max_page_count PRAGMA限制数据库大小以及使用授权器。

 

一次只能在数据库连接上建立一个授权器。每次致电SetAuthorizer将覆盖以前的呼叫。通过安装NULL回调来禁用授权者。授权器默认禁用。

 

授权人回调不能做任何修改调用授权器回调的数据库连接的事情。请注意,准备都会修改其数据库连接,以获取本段中“修改”的含义。

 

准备用于准备语句时,由于模式更改,该语句可能会在期间重新准备。因此,应用程序应确保在期间正确的授权人回调保留到位。

 

请注意,仅在准备或其变体中才调用授权器回调。中的语句评估期间不执行授权,除非前一段所述,在模式更改后调用准备来重新编写语句。