Npgsql - 以只读方式运行用户指定的查询

时间:2016-11-12 22:58:20

标签: c# .net postgresql npgsql

鉴于连接字符串中指定的用户具有write / alter / etc。权限,运行用户提供的查询时是否有可靠的方法来阻止数据修改(由下面的变量查询中的' query'指定)?

using (NpgsqlTransaction transaction = conn.BeginTransaction())
{
    using (NpgsqlCommand setReadonlyCommand = new NpgsqlCommand("SET TRANSACTION READ ONLY;", conn, transaction))
    {
        setReadonlyCommand.ExecuteNonQuery();
    }

    using (NpgsqlCommand command = new NpgsqlCommand(query, conn, transaction))
    {
        using (var reader = command.ExecuteReader())
        {
            //... read query results
        }
    }

    transaction.Rollback();
}

上面的代码段有两个安全网 - 在只读事务中运行,最后回滚事务。

但是用户可以通过添加语句" SET TRANSACTION READ WRITE;"来轻松覆盖这两者。和" COMMIT;"

是否有更复杂的方法可以确保即席查询不对数据库进行任何更改?

请注意,我们无法访问数据库本身,因此无法创建任何SP,角色等来帮助解决此问题。在这种情况下,我们所拥有的只是用户指定的连接字符串和用户查询。

0 个答案:

没有答案