所以基本上我正在为我的公司构建一个应用程序,它需要使用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发生了某些事情或数据库被其他东西触及,那么它就不会记录审计。
任何可以帮助我的建议,示例或文章都将不胜感激!
答案 0 :(得分:2)
这对你有用吗?
select user_name(),suser_sname()
卫生署!我忘了逃避我的代码。
答案 1 :(得分:2)
好的,它在这里工作。当我更新表格时,我看到了我的Windows凭据。所以,我打赌我们错过了一步。让我把我所做的1,2,3序列放在一起,也许我们可以追踪到这对你来说是什么。
答案 2 :(得分:1)
如果在连接字符串中将SSPI指定为Sql,我认为您提供了Windows凭据。
答案 3 :(得分:1)
我尝试使用Access,看看我是否能找到适合你的方法。我认为您可以为SQL表指定新的数据源,并选择Windows NT身份验证作为您的连接类型。
答案 4 :(得分:1)
当然:)
Access中应该有一个名为“外部数据”的部分(我正在运行新版本的Access,因此菜单选项可能会有所不同)。
表单中应该有一个指定ODBC连接的选项。
通过创建链接表,我可以选择链接到数据源。
然后我创建了一个Machine数据源。我从下拉列表中选择了SqlServer。然后,当我单击“下一步”时,系统会提示我要进行身份验证。
答案 5 :(得分:1)
CREATE TRIGGER testtrigger1
ON testdatatable
AFTER update
AS
BEGIN
INSERT INTO testtable (datecol,usercol1,usercol2) VALUES (getdate(),user_name(),suser_sname());
END
GO
答案 6 :(得分:1)
我们还有一个专门用于组织内的数据库系统,并使用Window NT登录。此函数返回当前用户的登录名:
CREATE FUNCTION dbo.UserName() RETURNS varchar(50)
AS
BEGIN
RETURN (SELECT nt_username FROM master.dbo.sysprocesses WHERE spid = @@SPID)
END
您可以在触发器中使用此功能。
答案 7 :(得分:0)
该应用有多少用户?是否有可能使用Windows集成身份验证进行SQL身份验证?
已更新:如果您可以为每个用户提供SQL登录(Windows集成),则可以使用SYSTEM_USER函数获取已登录的用户。
答案 8 :(得分:0)
应该是
select user name(),suser sname()
用下划线替换空格
答案 9 :(得分:0)
您需要使用集成安全性即可信连接进行连接,请参阅(http://www.connectionstrings.com/?carrier=sqlserver)
答案 10 :(得分:0)
我的解决方案是不允许Access使用链接表修改数据。
我只会在Access中创建UI,并使用连接字符串中经过身份验证的Windows创建与服务器的ADO连接。将您的访问应用程序编译为dbe以保护VB代码。
我不会发出SQL语句,但我会调用存储过程来执行数据库中的更改,并在原子事务中创建审计日志条目。
UI(Access)不需要知道服务器上的内部工作。它需要做的就是使用您为此目的创建的存储过程来请求和更新/插入/删除。服务器应该处理工作。
使用在服务器中实现提示NOLOCK的视图使用ADO检索记录集,并将此数据缓存在Access中以进行本地显示。或者检索单个记录并仅锁定该行以进行编辑。
使用链接表,您的用户将互相锁定。
使用ADO连接,您可以在每个客户端上设置ODBC。
创建表以设置服务器状态。您的应用程序将在任何操作之前检查它。您可以使用它将服务器关闭到应用程序,以防您需要执行更改或维护。
Access是一个很棒的工具。但它应该只处理其本地数据,不允许弄乱珍贵的服务器。