小编sta*_*tem的帖子

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();
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

.net c# postgresql npgsql

5
推荐指数
0
解决办法
357
查看次数

如何在 JavaScript 中删除 Worker 对象?

在我的网络应用程序中,我经常需要重新实例化 Worker 对象,因为无法将新脚本传递给旧的现有对象。一段时间后,某些浏览器开始阻止创建新的 Worker 对象,因为已达到一个窗口的 Workers 限制。我尝试在创建新的工作对象之前删除已完成的工作对象,但显然我这样做的方式是错误的。这是一个简单的测试,在 Opera 中失败(限制为每个窗口 256 个工作线程):

var worker;    
for(var i = 0; i < 300; i++) {
  for (var key in worker) worker[key] = null;
  delete worker.onmessage;
  delete worker.onerror;
  delete worker;
  worker = new Worker("script.js");
}
Run Code Online (Sandbox Code Playgroud)

我的问题是如何完全删除工作对象,以便永远不会达到浏览器限制?谢谢你!

javascript web-worker object-destruction

3
推荐指数
1
解决办法
7998
查看次数