您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

SQLScript 安全注意事项

您可以通过观察以下建议在 SAP HANA 中使用 SQLScript 开发安全过程。

使用 SQLScript,可以读取和修改数据库中的信息。在某些情况下,根据您选择的命令和参数,您可以创建可能出现数据泄露或数据篡改的情况。为防止出现这种情况,SAP 建议在所有过程中使用以下实践。

  • 使用关键字 IN 或 OUT 标记每个参数。避免使用 INOUT 关键字。

  • 如果希望用户具有分配的权限来启动过程,请使用 INVOKER 关键字。default 关键字 DEFINER 只允许过程的所有者启动它。

  • 尽可能使用 READS SQL DATA 标记只读过程。这可确保不会更改数据库的数据和结构。提示使用 READS SQL DATA 的另一个优势是优化性能。

  • 确保参数和变量的类型尽可能具体。例如,避免使用 VARCHAR。通过缩短变量的长度可以降低注入攻击的风险。

  • 对过程中的输入参数执行验证。

    动态 SQL

    在 SQLScript 中,可以使用以下命令之一创建动态 SQL:EXEC 和 EXECUTE IMMEDIATE。尽管这些命令允许在 SQLScript 中使用可能不支持的变量。在这些情况下,除非在程序中执行输入验证,否则您将面临注入攻击的风险。在某些情况下,注入攻击可以通过其他数据库表中的数据发生。

    为避免注入攻击的潜在漏洞,请考虑使用以下方法而不是动态 SQL:

  • 使用静态 SQL 语句。例如,使用静态语句 SELECT 代替 EXECUTE IMMEDIATE 并在 WHERE 子句中传递值。

  • 使用服务器端 JavaScript 编写此过程,而不是使用 SQLScript。

  • 使用 SQLScript 或服务器端 JavaScript 对过程中的输入参数执行验证。

  • 如果需要动态 APPLY_FILTER 条件,请使用 WHERE

  • 使用 SQL Injection Prevention 函数

    转义码

    您可能需要使用一些 SQLScript 中不支持的 SQL 语句,例如 GRANT 语句。在其他情况下,您可能希望使用数据定义语言 (DDL),其中某些 元素(而不是 元素)来自用户输入或其他数据源。CREATE TABLE 语句是可能发生此情况的示例。在这些情况下,您可以使用动态 SQL 从代码中的过程创建转义。

    为避免注入攻击的潜在漏洞,请考虑使用以下方法而不是转义代码:

  • 使用服务器端 JavaScript 编写此过程,而不是使用 SQLScript。

  • 使用 SQLScript 或服务器端 JavaScript 对过程中的输入参数执行验证。

    提示有关 SAP HANA 中安全的详细信息,请参阅 SAP HANA 安全指南。