You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在ODP.NET Core中执行Oracle GRANT语句时如何防范SQL注入

ODP.NET Core动态执行GRANT语句的防注入方案

能否使用sys.DBMS_ASSERT.simple_sql_name验证

可以直接使用,这个函数是Oracle官方提供的专门用于校验输入是否符合合法SQL标识符规则的工具,完全可以覆盖GRANT场景下的用户名、角色名、权限名、授权对象名称等标识符的校验需求。你只需要把动态拼接进GRANT语句的所有变量都通过这个函数完成校验,就能规避绝大多数SQL注入风险。

配套加固方案

建议配合以下措施进一步提升安全性:

  • 执行GRANT操作的数据库账号仅授予最小必要的权限管理权限,不开放额外系统权限,即使出现注入也能控制影响范围
  • 对所有拼接变量增加白名单校验:
    • 权限名仅允许业务用到的SELECT/INSERT/UPDATE/DELETE/EXECUTE等固定值,不在白名单内直接拒绝
    • 授权对象(表、视图、存储过程等)名称仅允许业务范围内的对象,禁止访问系统级对象
  • 拼接SQL时所有标识符统一用双引号包裹,避免特殊字符绕过校验规则
  • 所有权限变更操作留审计日志,记录执行账号、时间、执行的具体语句内容,方便后续溯源

C#示例代码

// 校验Oracle标识符合法性
private bool IsValidOracleIdentifier(string identifier, OracleConnection conn)
{
    using var checkCmd = conn.CreateCommand();
    checkCmd.CommandText = "SELECT sys.DBMS_ASSERT.simple_sql_name(:ident) FROM DUAL";
    checkCmd.Parameters.Add("ident", OracleDbType.Varchar2).Value = identifier;
    try
    {
        checkCmd.ExecuteScalar();
        return true;
    }
    catch (OracleException)
    {
        // 校验不通过会抛出ORA-44003异常
        return false;
    }
}

// 执行GRANT操作示例
public void GrantTablePermission(string userName, string permission, string tableName, OracleConnection conn)
{
    // 先做合法性校验
    if (!IsValidOracleIdentifier(userName, conn)
        || !IsValidOracleIdentifier(permission, conn)
        || !IsValidOracleIdentifier(tableName, conn))
    {
        throw new ArgumentException("存在非法输入参数");
    }
    // 白名单校验
    var allowedPermissions = new HashSet<string> { "SELECT", "INSERT", "UPDATE", "DELETE" };
    var allowedTables = new HashSet<string> { "USERS", "ORDERS", "PRODUCTS" };
    if (!allowedPermissions.Contains(permission.ToUpper()) 
        || !allowedTables.Contains(tableName.ToUpper()))
    {
        throw new ArgumentException("权限或表名不在允许范围内");
    }
    // 拼接执行GRANT语句
    using var grantCmd = conn.CreateCommand();
    grantCmd.CommandText = $"GRANT {permission} ON \"{tableName}\" TO \"{userName}\"";
    grantCmd.ExecuteNonQuery();
}

内容的提问来源于stack exchange,提问作者berliner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 09:30:04