4

有没有一种方法可以限制数据库用户一次连接到数据库并且一次只能进行一次查询?-在 SQL Server 2008 R2 中 -

示例 1:

  • 数据库:database_1
  • 用户名:some_user
  • 密码:some_pass

到 database_1 的第一个连接:

  • 连接:xxx.xxx.xxx.xx1
  • ...连接到 xxx.xxx.xxx.xx1

与 database_1 的第二次连接:

  • 连接:xxx.xxx.xxx.xx2
  • ...连接失败:xxx.xxx.xxx.xx2

用户some_user尝试执行一些查询:

查询一:

select * 
from table1 
join ,...,join tableN

示例 2:

  • 数据库:database_1
  • 用户名:some_user
  • 密码:some_pass

到 database_1 的第一个连接:

  • 连接:xxx.xxx.xxx.xx1
  • ...连接到 xxx.xxx.xxx.xx1

与 database_1 的第二次连接:

  • 连接:xxx.xxx.xxx.xx2
  • ...连接到 xxx.xxx.xxx.xx2

用户some_user尝试使用连接执行某些查询:xxx.xxx.xxx.xx1

查询1:

 select * from table1 join ,...,join tableN

结果:执行...返回 N 条记录

用户现在尝试使用连接执行另一个查询:xxx.xxx.xxx.xx2

查询2:

select * from table1 join , ... , join tableN

结果:未执行...一次不能执行多次查询。

4

1 回答 1

7

您可以使用登录触发器创建您喜欢的任何访问策略:

您可以使用登录触发器来审核和控制服务器会话,例如通过跟踪登录活动、限制对 SQL Server 的登录或限制特定登录的会话数

有关示例,请参见链接。如果您一次将用户限制为一个连接,那么您实际上将用户一次只限制为一个查询,因为出于所有实际目的,一个连接只能运行一个查询(不涉及MARS详细信息)。

您需要了解的一个相关概念是Resource Governor,它允许您通过将用户会话分配给特定工作负载并限制工作负载资源分配来限制用户可以使用的资源。同样,请参阅链接以获取详细信息和示例。

于 2013-05-26T20:31:58.497 回答