【问题标题】:How can I entrer the current IIS/Active Directory user into SQL?如何将当前的 IIS/Active Directory 用户输入 SQL?
【发布时间】:2013-01-14 21:09:25
【问题描述】:

我正在两个单独的页面中创建一个简单的 ASP.NET 详细信息和网格视图,以便进行简单的记录保存。详细信息视图将用于将记录输入数据库,网格视图将用于这些记录的任何更新。请注意,我的 IIS 服务器上仅启用了“Windows 身份验证”。

我要添加的功能之一是在记录插入或更新到数据库时进行审计。我在 SQL Server 2012 中使用 CURRENT_TIMESTAMP 命令在插入和/或更新记录时输入。但是,我试图写出哪个活动目录用户更新或插入了给定的记录。我首先尝试利用 SYSTEM_USER 命令,但写入数据库的所有内容都是 SQL 服务器服务帐户或 dbo 帐户,这是不可接受的。我理解为什么要编写 SQL Server 服务帐户,但我需要将当前 Active Directory 用户的名称写入“用户名”字段,如下所述。

这是我现在使用的时间戳和用户名命令(这不是我使用的确切 SQL 命令):

INSERT INTO <table-name> ([timestamp], [username]...) VALUES (CURRENT_TIMESTAMP, SYSTEM_USER...)
UPDATE <table-name> SET [timestamp] = CURRENT_TIMESTAMP, [username]) = SYSTEM_USER WHERE.....

当当前 Active Directory 用户插入和/或更新给定记录而不是 SQL Server 服务帐户的凭据时,将其写入“用户名”字段的最佳方法是什么?

提前致谢!

【问题讨论】:

    标签: asp.net sql-server active-directory iis-7.5 webforms


    【解决方案1】:

    您是如何连接到 SQL Server 的?您是使用 SQL 身份验证还是使用 Windows 身份验证进行连接?

    如果使用 sql auth,那么没有办法不将该信息与数据库命令(查询)一起传递。

    如果您使用 Windows 身份验证,您是否在 ASP.NET 中模拟用户?如果不是,那就和sql认证一样的问题。

    如果您在 ASP.NET 中使用模拟,那么 SYSTEM_USER 应该可以满足您的需求。

    如果您的网站在 AD 以外的用户存储中使用表单身份验证,那么您将遇到与 sql auth 相同的问题。

    这样想:SQL Server 知道网站的用户吗?在大多数情况下,不会,除非您使用 windows auth 进行模拟,或者您正在告诉 SQL Server 用户名(即通过您的命令语句传递它)。

    【讨论】:

    • 我正在通过 Windows 身份验证连接到服务器。我会检查用户模拟,看看是否是问题所在。
    • @TechieJoe:我不会简单地将您的应用程序更改为使用模拟来使其正常工作,这种更改对您的应用程序有重大影响。模拟的作用是使 ASP.NET 以登录到站点的 AD 用户身份运行。因此,任何访问外部资源(例如数据库、文件系统、网站资源等)的尝试都将在用户登录网站时进行。
    • 这是一个非常简单的应用程序,将被少数人使用。我已经敲定了服务器,因此这些用户将只能访问 Web 应用程序。还有其他选择吗?如果没有,我不介意做相应的修改网站的繁重工作。至少,这将是一次学习体验。
    • 据我所知,唯一的选择是以站点上的用户身份连接到 sql server(模拟),或者传递 sql server 需要的有关用户的任何信息命令的一部分(即,如果您在插入记录时记录用户名,请将名称作为参数之一传递给插入语句)。
    • 我正在参加有关 .Net 4.5 中的身份和访问控制的在线课程,并且刚刚了解到他们从头开始重写了此功能。为可能遇到此问题的人记录此内容,因为我一直在尝试将以前版本的文档用于我的服务器,但成功率为零。
    【解决方案2】:

    您可以将应用程序用户名存储在 context_info 变量中。然后在您的触发器或您需要的任何地方检索它。

    您应该在每次连接到 sql 之前执行此操作;应该很容易做到,因为通常你只有一个地方的连接代码。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    相关资源
    最近更新 更多