Sql server 获取连接';没有查看服务器状态权限的SQL Server中的IP地址?
有没有一种方法可以在用户不处于SysAdmin角色或被授予查看服务器状态的情况下获取连接的IP地址?发出此查询需要以下条件之一:Sql server 获取连接';没有查看服务器状态权限的SQL Server中的IP地址?,sql-server,ip-address,Sql Server,Ip Address,有没有一种方法可以在用户不处于SysAdmin角色或被授予查看服务器状态的情况下获取连接的IP地址?发出此查询需要以下条件之一: select client_net_address from sys.dm_exec_connections where session_id = @@spid 我想在Instead Of触发器中记录IP地址,但我不想授予所有用户查看服务器状态权限 谢谢你的建议 后续行动2013-10-05: 谢谢你的各种评论。将视图服务器状态授予所有用户有什么危险 CREATE
select client_net_address from sys.dm_exec_connections where session_id = @@spid
我想在Instead Of触发器中记录IP地址,但我不想授予所有用户查看服务器状态权限
谢谢你的建议
后续行动2013-10-05: 谢谢你的各种评论。将视图服务器状态授予所有用户有什么危险
CREATE PROCEDURE Some_Proc
WITH EXECUTE AS 'User_With_Permission'
AS
BEGIN
SET NOCOUNT ON;
select client_net_address from sys.dm_exec_connections where session_id = @@spid
END
从触发器调用此过程您可以将触发器设置为以所有者身份执行:
ALTER TRIGGER dbo.whatever_instead
ON dbo.whatever
WITH EXECUTE AS OWNER
INSTEAD OF INSERT
AS
BEGIN
SET NOCOUNT ON;
INSERT dbo.log_table(column1, ...)
SELECT client_net_address, ...
FROM sys.dm_exec_connections
WHERE session_id = @@SPID;
... other stuff here I'm sure ...
END
GO
但是,默认情况下,您应该得到以下错误:
Msg 15562,16级,状态1,程序
正在执行的模块不受信任。需要授予模块数据库的所有者身份验证权限,或者需要对模块进行数字签名。 声明已终止 解决此问题的一种方法是将数据库设置为: 不要轻视此设置:
ALTER DATABASE database_name SET TRUSTWORTHY ON;