怎样才能用SQL 语句来获得登陆到SQL SERVER服务器上的用户的基本信息
比如:登录者的信息 问题点数:20、回复次数:8Top
1 楼MorningTea(一勺抹茶)回复于 2005-08-23 10:48:22 得分 10
1.查看所有数据库用户登录信息
sp_helplogins
2.查看所有数据库用户所属的角色信息
sp_helpsrvrolemember
3.查看远端数据库用户登录信息
sp_helpremotelogin
4.查看数据库里用户和进程的信息
sp_who
5.查看SQL Server数据库里的活动用户和进程的信息
sp_who 'active'
Top
2 楼vivianfdlpw()回复于 2005-08-23 10:49:27 得分 10
/*--获取连接SQL服务器的信息
所有连接本机的:操作的数据库名,计算机名,用户名,网卡物理地址,IP地址,程序名
-*/
/*--调用示例
--显示所有本机的连接信息
exec p_getlinkinfo
--显示所有本机的连接信息,包含ip地址
exec p_getlinkinfo @includeip=1
--显示连接指定数据库的信息
exec p_getlinkinfo '客户资料'
--*/
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_getlinkinfo]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[p_getlinkinfo]
GO
create proc p_getlinkinfo
@dbname sysname=null, --要查询的数据库名,默认查询所有数据库的连接信息
@includeip bit=0 --是否显示IP地址,因为查询IP地址比较费时,所以增加此控制
as
declare @dbid int
set @dbid=db_id(@dbname)
create table #tb(id int identity(1,1),dbname sysname,hostname nchar(128),loginname nchar(128),net_address nchar(12),net_ip nvarchar(15),prog_name nchar(128))
insert into #tb(hostname,dbname,net_address,loginname,prog_name)
select distinct hostname,db_name(dbid),net_address,loginame,program_name from master..sysprocesses
where hostname<>'' and (@dbid is null or dbid=@dbid)
if @includeip=0 goto lb_show --如果不显示IP地址,就直接显示
declare @sql varchar(500),@hostname nchar(128),@id int
create table #ip(hostname nchar(128),a varchar(200))
declare tb cursor local for select distinct hostname from #tb
open tb
fetch next from tb into @hostname
while @@fetch_status=0
begin
set @sql='ping '+@hostname+' -a -n 1 -l 1'
insert #ip(a) exec master..xp_cmdshell @sql
update #ip set hostname=@hostname where hostname is null
fetch next from tb into @hostname
end
update #tb set net_ip=left(a,patindex('%:%',a)-1)
from #tb a inner join (
select hostname,a=substring(a,patindex('Ping statistics for %:%',a)+20,20) from #ip
where a like 'Ping statistics for %:%') b on a.hostname=b.hostname
lb_show:
select id,数据库名=dbname,客户机名=hostname,用户名=loginname
,网卡物理地址=net_address,IP地址=net_ip,应用程序名称=prog_name from #tb
goTop
3 楼yanggang041617()回复于 2005-08-23 10:50:34 得分 0
谢谢你,但是我想知道如果我插入了一条数据,我想知道是谁插入的,如果我用以上的话,是不是不行呀?那我该怎样写呀?Top
4 楼MorningTea(一勺抹茶)回复于 2005-08-23 10:50:47 得分 0
--补充:
4.查看数据库里用户和进程的信息
sp_who
sp_who有个升级的sp,为sp_who2Top
5 楼MorningTea(一勺抹茶)回复于 2005-08-23 11:02:21 得分 0
难道我理解错了
楼主问的是前台用户的ip,电脑名称吗?
'===得到當前登入DOMAIN之用戶名(轉為小寫)
Function g_GetUser()
Dim Loa
dim LoginName
LoginName=request.servervariables("logon_user")
Loa=instr(1,LoginName,"\")
LoginName=mid(LoginName,Loa+1)
g_GetUser=Lcase(LoginName)
End Function
'===得到當前登入的網域(返回TG_DOMAIN or WL_Domain or Mht_domain)-->OK
Function g_GetDomain()
dim a
dim i
dim b
a=Request.ServerVariables("REMOTE_USER")
i=instr(a,"\")
b=left(a,i-1)
g_GetDomain=b
end Function
'*********固定函數**********************
'* 1.Request.ServerVariables("APPL_PHYSICAL_PATH") www根目錄的實際路徑-->c:\inetpub\wwwroot\
'* 2.Request.ServerVariables("PATH_INFO") 被啟動之ASP網頁之虛擬路徑檔案名稱---> /eng/patent/p.asp
'* 3.Request.ServerVariables("Script_Name") 同2
'* 4.Request.ServerVariables("PATH_TRANSLATED") 被啟動之ASP網頁的實際路徑檔案名稱---> C:\Inetpub\wwwroot\eng\patent\p.asp
'* 5.Request.ServerVariables("SERVER_NAME") 當前頁面所屬之IIS服務器名---->HADES
'* 6.Request.ServerVariables("REMOTE_ADDR") 作出URL請求之遠程主機之IP
'* 7.Request.ServerVariables("SERVER_PORT") HTTP請求所送到的服務器端口號
'*?8.Server.MapPath("/eng/patent") [相對路徑]及[實際路徑]轉換為Server機器的[實際路徑]--->c:\Inetpub\wwwroot\eng...
'*?9.Server.HTMLEncode("")
'****************************************
————不知道是否对你有用啦,仅供参考Top
6 楼yanggang041617()回复于 2005-08-23 13:38:00 得分 0
我是想知道谁登录了SQL SERVER,也就是谁对数据表进行了操作,是在SQL SERVER 里面的,不是基于。NET里面编程的。谢谢大家Top
7 楼vivianfdlpw()回复于 2005-08-23 13:45:44 得分 0
用Log Explorer软件Top
8 楼MorningTea(一勺抹茶)回复于 2005-08-23 14:27:09 得分 0
这个我就是直接打开企业管理器--〉选择服务器--〉Management-->
Current Activity-->Locks/Objects -->表格--〉ProcessID-->可以看到他们的操作语句Top




