跳到主要内容

自有 MySQL 数据库访问

在选择自有 MySQL 数据库的情况下,除了使用数据模型的访问方法读写数据外,我们也提供了直接通过 SQL 命令读写数据的方法和接口,同时您也可以在云函数中,通过常规的数据库 SDK 实现数据库访问。

使用场景

  • 常规查询或数据操作:使用数据模型方法
  • 复杂查询,多表或联表查询:使用模型方法中的数据库查询能力。
  • 复杂的写入、插入、更新数据:通过云函数中的通用数据库操作方法连接并操作数据库。

查询 MySQL 数据库

MySQL 数据库类型的模型,数据模型 SDK 提供两种模式的查询方法:

  • $runSQL: 预编译模式, 通过参数化查询来避免 SQL 注入风险
  • $runSQLRaw 原始模式, 更加灵活的模式,SQL 语句会当做原始字符串进行查询,存在 SQL 注入的风险

注意:

  1. runSQLrunSQLRaw 接口仅支持在服务端调用,如云函数/云托管/服务器等场景,不支持小程序/web 端直接调用
  2. 建议优先采用预编译模式,避免 SQL 注入风险
  3. 当前仅开放了 select 语句,如果有其他 SQL 语句需求,请通过官方社群联系我们

预编译模式 $runSQL

预编译模式下使用参数化查询设计,结合静态模板语法和动态运行时参数,以实现灵活的数据交互。

允许开发者通过 Mustache 变量绑定语法({{ }})直接在 SQL 查询中嵌入静态参数,同时也支持在运行时通过 $runSQL() 方法执行时动态传递参数,可以避免直接拼接字符串导致 SQL 注入的风险。

详情可参考 $runSQL 文档 注意这里要指定自己的MySQL数据连接器标识,否则会访问云数据库MySQL

原始模式 $runSQLRaw

在某些情况(例如动态表名等)下可能希望关闭预编译模式,我们也支持直接传入原始的 SQL 语句的方式来执行 SQL,这种情况下需要自行处理 SQL 注入的防范。

详情可参考 $runSQLRaw 文档 注意这里要指定自己的MySQL数据连接器标识,否则会访问云数据库MySQL

SQL 注入防范

在使用 $runSQLRaw 原始模式时,由于 SQL 语句会被当做原始字符串进行查询,因此开发者需要自行确保 SQL 语句的安全性,避免 SQL 注入的风险。以下是一些防范 SQL 注入的措施:

  1. 使用预编译模式:如非必要,优先使用 $runSQL 预编译模式,利用参数化查询来避免 SQL 注入。

  2. 对用户输入进行验证:在将用户输入的数据用于 SQL 语句之前,进行严格的验证和过滤,确保输入数据的合法性。

  3. 使用白名单验证:对于用户可以输入的值,使用白名单来验证,只允许预定义的安全值。

  4. 转义特殊字符:对于无法使用参数化查询的情况,确保对用户输入的数据进行转义,特别是 SQL 语句中的特殊字符,如单引号 '

  5. 错误处理:合理处理数据库查询错误,避免将详细的错误信息暴露给用户,这可能会泄露数据库结构信息,增加 SQL 注入的风险