【问题标题】:How to see what user conntect to SQL Server when Integrated Security=True当 Integrated Security=True 时如何查看连接到 SQL Server 的用户
【发布时间】:2021-03-05 21:04:28
【问题描述】:

当我尝试在集成安全 = true 中从我的应用程序创建 EF 上下文时,我收到一条消息“数据库“DB”中的 CREATE TABLE 权限被拒绝”。

如何查看 IIS 连接到 SQL Server 的用户并授予适当的权限? 可能是 john\mypc 或其他人,但我想知道确切的用户名。

【问题讨论】:

  • 一般情况下,您需要为您的 Apppool 授予 SQL 服务器权限

标签: c# sql-server entity-framework frameworks entity


【解决方案1】:

如果不确定用户使用一个帐户连接到您的 SQL Server 实例,您可以创建一个Logon Trigger

网上有很多例子,一个来自here

CREATE DATABASE LogonAudit /* Creates db for storing audit data */
USE [LogonAudit]
CREATE TABLE LogonAuditing /* Creates table for logons inside db */
(
    SessionId int,
    LogonTime datetime,
    HostName varchar(50),
    ProgramName varchar(500),
    LoginName varchar(50),
    ClientHost varchar(50)
)
GO
CREATE TRIGGER [LogonAuditTrigger] /* Creates trigger for logons */
ON ALL SERVER 
FOR LOGON
AS

BEGIN
DECLARE @LogonTriggerData xml,
@EventTime datetime,
@LoginName varchar(50),
@ClientHost varchar(50),
@LoginType varchar(50),
@HostName varchar(50),
@AppName varchar(500)

SET @LogonTriggerData = eventdata()

SET @EventTime = @LogonTriggerData.value('(/EVENT_INSTANCE/PostTime)[1]', 'datetime')
SET @LoginName = @LogonTriggerData.value('(/EVENT_INSTANCE/LoginName)[1]', 'varchar(50)')
SET @ClientHost = @LogonTriggerData.value('(/EVENT_INSTANCE/ClientHost)[1]', 'varchar(50)')
SET @HostName = HOST_NAME()
SET @AppName = APP_NAME()

INSERT INTO [LogonAudit].[dbo].[LogonAuditing]
(
SessionId,
LogonTime,
HostName,
ProgramName,
LoginName,
ClientHost
)
SELECT
@@spid,
@EventTime,
@HostName,
@AppName,
@LoginName,
@ClientHost

END
GO

然后删除它。

【讨论】:

  • 然后我得到这个错误:由于登录触发器无法登录到 sql server 我在单用户模式下启动 mssql 并删除触发器。
猜你喜欢
  • 1970-01-01
  • 2010-11-16
  • 2010-12-23
  • 2019-09-25
  • 2010-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多