<IDENTITY IMPERSONATE=TRUE> & Application_Start 事件

Posted

技术标签:

【中文标题】<IDENTITY IMPERSONATE=TRUE> & Application_Start 事件【英文标题】:<IDENTITY IMPERSONATE=TRUE> & Application_Start event 【发布时间】:2012-07-11 15:08:27 【问题描述】:

所以 - 经过大量研究, 似乎只在 Application_Start 事件触发后才起作用。

有人知道这个问题的解决方法吗?我有一个应用程序需要在应用程序首次启动时创建数据库。运行 IIS 网站的用户具有适当的权限,可以以 APP_POOL 用户特别没有的方式进行操作。

我目前的 HACK 解决方案是放(伪代码)

static bool AppInitialized = false;
void Session_Start() 
   if (!AppInitialized) 
     AppInitialized=true;
     InitializeApp();
   

impersonate=true 将在特定会话开始时“生效” - 所以这很有效,但似乎很愚蠢,因为我基本上是在重新创建 Application_Start 事件的行为。似乎必须有一个更优雅的解决方案来解决这个问题 - 不是吗?

【问题讨论】:

【参考方案1】:

这很奇怪—— 我的 web.config 文件中有这个条目:

<identity impersonate="true" password="blarhg" userName="thisuser"/>

当我检查 Application_Start() 事件的身份时,它给了我“thisuser”。

这不正确吗?

【讨论】:

是的 - 这是正确的。问题是当您尝试检测经过身份验证的用户的身份时。换句话说,如果您在身份字段中指定用户名/密码,则它在应用程序启动事件期间可用。如果想要经过身份验证的用户的身份,它在 Session_Start 可用,但在 Application_Start 期间不可用。在 Application_Start 事件期间,使用了 APP_POOL 身份,这正是我不想授予访问我的数据库的用户......这有意义吗? 这很有道理,但我正在尝试思考您要如何/为什么要这样做大声笑 =) 您认为您会在哪里登录到您的应用程序来启动应用程序? APP POOL 会每隔一段时间回收一次(我认为默认为 90 分钟),因此应用程序将在一天中多次停止和启动。如果您想在应用程序启动时启动某个进程(并且执行此操作的用户很重要),您可能应该手动验证用户/帐户并运行您的进程,然后释放模拟。希望这会有所帮助

以上是关于<IDENTITY IMPERSONATE=TRUE> & Application_Start 事件的主要内容,如果未能解决你的问题,请参考以下文章

使用 Identity Impersonate 时,我无法访问本地 ASPNETDB.MDF 数据库

关于 web.config impersonate 帐号模拟

服务器上office不能正常使用?

到 SQL Impersonate 的 ASP 连接字符串

dir.who is not allowed to impersonate hadoop的问题

User: root is not allowed to impersonate admin