半动态查询和数据库安全
Semi-dynamic queries and database security
我知道带有静态缓冲区的纯 Progress 4GL 代码,find,for each 等在编译时(或另外在 运行 时使用 "Use Runtime Permissions Checking" 选项受制于数据库安全).
动态查询仅在 运行 时受数据库安全保护。
有谁知道下面示例中的代码会如何运行?
define query q for OrderLine.
DEFINE VARIABLE hQuery AS HANDLE NO-UNDO.
hQuery = QUERY q:HANDLE.
hQuery:QUERY-PREPARE("FOR EACH OrderLine NO-LOCK WHERE OrderLine.Itemnum = 100":U).
hQuery:QUERY-OPEN().
get first q.
do while available OrderLine:
display OrderLine.Qty.
get next q.
end.
close query q.
QUERY-PREPARE() 和 QUERY-OPEN() 在 运行 时执行,编译器无法在编译时评估参数是什么,因此 运行 时间是安全性应用。
(即使您使用静态字符串作为参数,编译器也不够智能,无法对其执行任何操作。)
我知道带有静态缓冲区的纯 Progress 4GL 代码,find,for each 等在编译时(或另外在 运行 时使用 "Use Runtime Permissions Checking" 选项受制于数据库安全).
动态查询仅在 运行 时受数据库安全保护。
有谁知道下面示例中的代码会如何运行?
define query q for OrderLine.
DEFINE VARIABLE hQuery AS HANDLE NO-UNDO.
hQuery = QUERY q:HANDLE.
hQuery:QUERY-PREPARE("FOR EACH OrderLine NO-LOCK WHERE OrderLine.Itemnum = 100":U).
hQuery:QUERY-OPEN().
get first q.
do while available OrderLine:
display OrderLine.Qty.
get next q.
end.
close query q.
QUERY-PREPARE() 和 QUERY-OPEN() 在 运行 时执行,编译器无法在编译时评估参数是什么,因此 运行 时间是安全性应用。
(即使您使用静态字符串作为参数,编译器也不够智能,无法对其执行任何操作。)