【问题标题】:sql-server: how do i know who is in my database?sql-server:我怎么知道谁在我的数据库中?
【发布时间】:2011-04-28 20:40:36
【问题描述】:

我有一个访问前端和 sql server 后端。我想知道哪些用户当前正在使用该数据库。这可以使用 access 或 sql-server 吗?

【问题讨论】:

标签: sql sql-server ms-access vba


【解决方案1】:

在 SQL Server 中,您可以运行这个存储过程:

sp_who2

编辑:

如果您想查看在任何给定时间谁在使用您的服务器,您可以使用此查询。这将允许您随意进一步过滤。

SELECT
    SessionId           = ses.session_id
    ,[Database]    = DB_Name(er.database_id)
    ,[Login]            = ses.login_name
    ,Host               = ses.host_name
    ,StartTime          = er.start_time
    ,ClientAddress      = con.client_net_address
    ,SQLStatement       = st.text
FROM sys.dm_exec_requests er
OUTER APPLY sys.dm_exec_sql_text(er.sql_handle) st
LEFT JOIN sys.dm_exec_sessions ses ON ses.session_id = er.session_id
LEFT JOIN sys.dm_exec_connections con ON con.session_id = ses.session_id
WHERE ses.is_user_process = 0x1
AND ses.session_id != @@SPID
ORDER BY
    ses.session_id

【讨论】:

  • 我如何用这个来优化结果?例如 select * from sp_who2 where.......
  • 查看我修改后的答案。我给了你一个脚本,可以让你过滤用户列表。
【解决方案2】:

对于 SQL Server 你可以试试

SELECT * 
FROM sys.dm_exec_sessions

这将列出所有打开的会话

【讨论】:

  • 这是一个很晚的评论,但您可以使用 DB_NAME() 函数从 sys.dm_exec_sessions 获取数据库的名称。只需将 database_id 列传递给函数,它就会为您提供数据库的实际名称。
【解决方案3】:

这完全取决于您的访问数据库中如何实现对 SQL Server 的安全性和访问

如果它为所有用户使用单个 SQL Server 登录到 sql 后端(这很常见),那么就无法知道。

【讨论】:

    【解决方案4】:

    1) 作为开发人员,您必须在 SQL Server 上拥有 VIEW SERVER STATE 权限才能查看 SQL Server 实例上所有正在执行的会话。否则,您只会看到当前会话 最简单的方法是使用您的系统管理员凭据打开连接(即使用 sqlcmd 或 Management Studio)并发出以下语句:

    GRANT VIEW SERVER STATE TO(您的网络用户 ID)

    2) 在五分钟或十分钟不活动后,访问似乎与 SQL Server 断开连接。我还没有时间进行详细搜索并找出可以覆盖此设置的设置(如果有)。

    3) 使用 SQL Server 工具的开发人员可能会连接到主数据库,即使他们正在查看数据数据库中的对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-23
      • 2012-10-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多