【问题标题】:Building an auditing system; MS Access frontend on SQL Server backend建立审计制度; SQL Server 后端上的 MS Access 前端
【发布时间】:2010-09-05 23:21:02
【问题描述】:

所以基本上我正在为我的公司构建一个应用程序,它需要使用 MS Access 构建,并且需要在 SQL Server 上构建。

我已经制定了大部分计划,但很难找到处理审计系统的方法。

由于它仅在内部使用,您甚至无法从建筑物外部触摸数据库,我们没有使用登录系统,因为该程序只有在用户已经登录到我们的内部后才能使用网络通过 Active Directory。知道了这一点,我们使用a system to detect automatically the name of the Active Directory user 并在其中一个数据库表中使用他们的权限,决定他们可以做什么或不可以做什么。

所以实际的审计表将有 3 列(这个设计可能会改变,但对于这个问题没关系);谁(Active Directory 用户)、何时(添加/删除/编辑时间)、什么(更改了什么)

我的问题是我应该如何处理这个问题。理想情况下,我知道我应该使用触发器,以便在没有记录审核的情况下更新数据库,但是我不知道如何以这种方式获取 Active Directory 用户。另一种方法是将其直接编码到 Access 源中,以便每当发生变化时,我都会运行 INSERT 语句。显然这是有缺陷的,因为如果 Access 发生某些事情或数据库被其他东西触及,那么它不会记录审计。

任何可能对我有帮助的建议、示例或文章将不胜感激!

【问题讨论】:

  • 呃不工作,仍然通过触发器添加相同的东西。另外我应该提到我正在使用 ODBC 连接...

标签: sql sql-server ms-access triggers


【解决方案1】:

这对你有用吗?


select user_name(),suser_sname()

哇!我忘了转义我的代码。

【讨论】:

    【解决方案2】:

    好的,它在这里工作。更新表格时,我看到了我的 Windows 凭据。所以,我敢打赌我们错过了一步。让我将我所做的 1,2,3 序列放在一起,也许我们可以找出问题所在。


    1. 创建一个新的 MSAccess 数据库(空)
    2. 点击表格部分
    3. 选择外部数据
    4. 选择 ODBC 数据库
    5. 通过创建链接表选择指向数据源的链接
    6. 选择机器数据源
    7. 选择新的...
    8. 系统数据源
    9. 从列表中选择 SQL Server,然后单击下一步,完成。
    10. 为新数据源命名和描述,并为服务器选择(本地)。点击下一步。
    11. 选择“使用网络登录 ID 进行 Windows NT 身份验证”。点击下一步。
    12. 选中将默认数据库更改为,然后选择数据库。点击下一步。点击完成。
    13. 测试数据源。
    14. 选择与触发器关联的表,然后单击确定。
    15. 在 Access 中打开表并修改其中一项(触发器不会在插入时触发,只是更新)
    16. 从您的审计表中选择 *

    【讨论】:

    • 显然我是个白痴,因为它似乎在工作。我想在另一个帐户上尝试它,但当然没有安装 Access 的人仍然在这里,我无法创建新帐户。呃,无论如何应该可以工作 - 最终结果将在周一发布!感谢所有的帮助。
    【解决方案3】:

    如果您在与 Sql 的连接字符串中指定 SSPI,我认为您的 Windows 凭据已提供。

    【讨论】:

    • 是的,这两个命令做了我怀疑的事情,只是为每个人返回了同样的东西。我没有使用连接字符串;正如我之前所说,我正在使用 Access,并且只是使用 Linked Tables 连接到我的数据库。
    【解决方案4】:

    我试着玩一下 Access,看看能否找到适合你的方法。我认为您可以为您的 SQL 表指定一个新的数据源,然后选择 Windows NT 身份验证作为您的连接类型。

    【讨论】:

    • Jay,你能详细介绍一下你是怎么做到的吗……哈哈,只是开始,我不完全按照你的意思。但这仍然有效吗,我仍然需要通过 SQL Server 进行身份验证才能运行查询。
    【解决方案5】:

    当然:)

    Access 中应该有一个名为“外部数据”的部分(我正在运行新版本的 Access,因此菜单选择可能会有所不同)。

    应该有一个选项来指定 ODBC 连接。

    我可以通过创建链接表来链接到数据源。

    然后我创建了一个机器数据源。我从下拉列表中选择了 SqlServer。然后,当我单击下一步时,系统会提示我如何进行身份验证。

    【讨论】:

      【解决方案6】:
      CREATE TRIGGER testtrigger1
      ON testdatatable
      AFTER update
      AS 
      BEGIN
          INSERT INTO testtable (datecol,usercol1,usercol2) VALUES (getdate(),user_name(),suser_sname());
      END
      GO
      

      【讨论】:

        【解决方案7】:

        我们还有一个专门在组织内使用的数据库系统,并使用 Window NT 登录。该函数返回当前用户的登录名:

        CREATE FUNCTION dbo.UserName() RETURNS varchar(50)
        AS
            BEGIN
            RETURN  (SELECT nt_username FROM master.dbo.sysprocesses WHERE spid = @@SPID)
            END
        

        您可以在触发器中使用此功能。

        【讨论】:

          【解决方案8】:

          应该是

          select user name(),suser sname()
          

          用下划线替换空格

          【讨论】:

          • LOL 多么令人尴尬,这也回答了我不成文的问题,即斜体是怎么回事?我不确定这些是否会起作用,或者只是返回我用来将 Access 应用程序连接到数据库的用户名,这对每个人来说都是一样的 - 有没有办法以某种方式使用 Active Directory 作为 SQL Server 身份验证过程的一部分?无论如何,我将进行一些测试以确保情况确实如此。
          【解决方案9】:

          您需要使用集成安全性即可信连接进行连接,请参阅 (http://www.connectionstrings.com/?carrier=sqlserver)

          【讨论】:

          • 这是唯一的方法吗?我是否必须更改链接表的整个模型?老实说,我什至不知道如何将连接字符串集成到 Access...
          【解决方案10】:

          该应用会有多少用户?是否有可能使用 windows 集成身份验证进行 SQL 身份验证?

          更新:如果您可以为每个用户提供一个 SQL 登录名(Windows 集成),那么您可以使用 SYSTEM_USER 函数获取已登录的用户。

          【讨论】:

          • @KevinKenny 我会说 10-30 之类的东西,未来有更多潜力。我从来没有真正听说过或使用过用于 SQL 服务器的 Windows 集成身份验证。它容易/安全吗?对老板来说,这样的事情可能更难卖。 ://
          【解决方案11】:

          我的解决方案是不让 Access 使用链接表修改数据。

          我只会在 Access 中创建 UI,并使用在连接字符串中经过身份验证的 Windows 创建到服务器的 ADO 连接。将您的 Access 应用程序编译为 dbe 以保护 VB 代码。

          我不会发出 SQL 语句,但我会调用存储过程来执行数据库中的更改,并在原子事务中创建审计日志条目。

          UI(访问)不需要知道服务器上的内部工作。它需要做的就是使用您为此目的创建的存储过程请求和更新/插入/删除。服务器应该处理这项工作。

          使用在服务器中实现了提示 NOLOCK 的视图通过 ADO 检索记录集,并将此数据缓存在 Access 中以供本地显示。或者检索单个记录并仅锁定该行以进行编辑。

          使用链接表,您的用户将相互锁定。

          使用 ADO 连接,您将不必在每个客户端上设置 ODBC。

          创建一个表来设置服务器状态。您的应用程序将在任何操作之前对其进行检查。您可以使用它来关闭应用程序的服务器,以防您需要执行更改或维护。

          Access 是一个很棒的工具。但它应该只处理它的本地数据,不能乱动珍贵的服务器。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多