3

我们有一个使用 SQL Server 登录(不是 AD)对数据库进行身份验证的应用程序。这是一个单一的通用帐户,因此如果我们有 100 个用户登录,他们创建的所有连接都具有与之关联的相同用户名。

这对我们想要用来监控服务器上不适当或错误行为的一些审计工具提出了挑战(它们无法解析用户)。

有没有更好的方法来管理这种连接?以下是我们的目标:

我们希望授权应用程序访问 SQL 服务器,而不是用户(所以我们不希望用户能够启动 Access 或 Crystal Reports 并开始弄乱数据库,访问应该通过我们的代码)。出于这个原因,我们避免使用集成安全性。

我们希望能够将 SQL Server 上的活动进程与启动它的用户相关联

我们需要能够使用 ORM(比起存储过程更喜欢参数化 SQL,因此我们不能只指定 AD 帐户的仅执行权限)

我所知道的唯一让我知道的选择是:

  • 将某种特定于用户的元数据附加到连接
  • 每个用户使用 SQL Server 登录
  • 放弃我们连接上的任何用户身份信息

有没有我不知道的第四个选项?

4

1 回答 1

1

一般的方法是将用户名附加到所有写入的记录......通过 FK 审计/历史表或作为表上的列。您的应用程序是与数据库对话的 - 您的用户没有我所知道的任何“通过”。

另一种选择是在用户使用您的应用程序时获取用户的用户名,并在用户的会话中放置一个连接字符串/使用集成凭据和传入的用户用户名的任何内容......然后让用户在他们使用期间使用他们唯一存储的连接字符串应用程序。那应该可以,但是您必须在代码中处理 SQLExceptions 以获得权​​限等...我想您无论如何都必须处理。

于 2013-06-21T17:36:46.413 回答