<IDENTITY IMPERSONATE=TRUE> & Application_Start 事件
Posted
技术标签:
【中文标题】<IDENTITY IMPERSONATE=TRUE> & Application_Start 事件【英文标题】:<IDENTITY IMPERSONATE=TRUE> & Application_Start event 【发布时间】:2012-07-11 15:08:27 【问题描述】:所以 - 经过大量研究,
有人知道这个问题的解决方法吗?我有一个应用程序需要在应用程序首次启动时创建数据库。运行 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 帐号模拟