通过SQL server触发器保存win用户名

本文关键字:win 用户 保存 触发器 SQL server 通过 | 更新日期: 2023-09-27 18:10:01

有一个本地FOX应用程序连接到SQL Server数据库。数据库中有一个触发器,它保存对db表的更改,如:

 INSERT INTO dbo.UpdateContract
 SELECT 'OLD' RecordType,USER,SYSTEM_USER,@Time, (...)

我正在通过。net (c#)开发相同的应用程序,不知道如何使用相同的触发器来保存登录到我的。net应用程序(或windows用户)的用户名称。我可以使用静态cs,比如

 SqlConnection sqlConn = new SqlConnection("Server=servername;Database=dbname;User Id=dbuser;Password=Pass;");

(当然,触发器保存这个用户名而不是应用程序的用户名)或者这个cs:

 SqlConnection sqlConn = new SqlConnection("Data Source=servername; Initial Catalog=dbname; Integrated Security=SSPI;");

(但在本例中,触发器使用服务器机器名)

通过SQL server触发器保存win用户名

可以在CREATE TABLE和ALTER TABLE语句中使用带有默认约束的SYSTEM_USER函数。您也可以将其用作任何标准函数。

如果用户名和登录名不相同,SYSTEM_USER返回登录名。

如果当前用户使用Windows认证方式登录SQL Server, SYSTEM_USER返回Windows登录标识名,形式为:DOMAIN'user_login_name。但是,如果当前用户以SQL Server身份验证方式登录SQL Server,则SYSTEM_USER返回SQL Server登录标识名,例如对于以WillisJo登录的用户,返回WillisJo。

SYSTEM_USER返回当前正在执行的上下文的名称。如果使用EXECUTE AS语句切换上下文,SYSTEM_USER返回模拟上下文的名称。

有可能你的"非c#版本"正在模拟上下文。您可以在连接到服务器后应用此连接:

EXECUTE AS USER = 'YourWindowsUsername';

应该切换上下文。我不确定这是否是正确的方法,您可能想要添加新的字段来触发:CURRENT_USER,这可能是您需要的。

来源:http://msdn.microsoft.com/en-us/library/ms176050 (v = sql.105) . aspx