Recently, we have proposed a model-driven approach for enforcing fine-grained access control (FGAC) policies when executing SQL queries. More concretely, we have defined a function SecQuery() that, given an FGAC policy S and a SQL select-statement q, generates a SQL stored-procedure SecQuery(S, q), such that: if a user u with role r is authorised, according to S, to execute q based on the current state of the database, then calling SecQuery(S, q)(u, r) returns the same result as when u executes q; otherwise, if the user u is not authorised, according to S, to execute q based on the current state of the database, then calling SecQuery(S, q)(u, r) signals an error. Not surprisingly, executing the query q takes less time than calling the corresponding stored-procedure SecQuery(S, q). Here we propose a model-based methodology for optimising the stored-procedures generated by the function SecQuery(). The idea is to eliminate authorisation checks in the body of the stored-procedures generated by SecQuery(), when they can be proved to be unnecessary. Based on our previous mapping from the Object Constraint Language (OCL) to many-sorted first-order logic, we can attempt to prove that authorisation checks are unnecessary by using SMT solvers. We include a case study to illustrate and show the applicability of our methodology.
翻译:最近,我们提出了在执行 SQL 查询时执行微缩访问控制( FGAC) 政策的模式驱动方法。 更具体地说, 我们已经定义了一个函数 SecQuery (), 根据 FGAC 政策 S 和 SQL 选择报表 q, 依据一个 SQL 政策 S 和 SQL 选择报表 q, 产生一个 SQL 存储程序 secQuery (S, q, r), 这样: 如果 S 授权一个有角色 r 的用户在数据库当前状态下执行不必要访问控制( FGAC ) 政策。 然后调用 SecQuery (S, q, qu, r) 返回与执行 q Q 查询时相同的结果; 否则, 如果用户 u没有得到授权, 根据数据库当前状态执行 SQL 存储程序 S和 SQ 选项执行 qrequestate, 然后调用我们之前的存储- prequire- translates 来解析的系统,, 将显示Securrupre- transport 。 在Seal- transport 中, 可以显示 Scurruption- translation 函数可以显示, 。