【问题标题】:How to schedule task (or jobs) to run in background and under user impersonation如何安排任务(或作业)在后台和用户模拟下运行
【发布时间】:2015-10-31 17:28:57
【问题描述】:

我有这种情况,我需要用户能够登录到机器并安排一些任务(例如运行查询并获取结果并保存它们)以供将来运行。

让我举个例子。例如,我有一个服务。用户 (User1)(他是域用户)连接到此服务并向我的服务调用发送 SQL 查询、服务器名称和数据库名称)。该服务需要在这里做的是创建一个任务,该任务将在白天的某个未来时间运行(可能在晚上,即:晚上 11 点)。此任务在晚上 11 点运行查询时将连接到先前传递的服务器名称和数据库名称上的 SQL 并触发查询,然后将结果保存在 excel 中。运行时的查询应使用用户 (User1) 上下文,以便在有任何受限权限时应遵守该上下文。如果我使用 MDX 查询,也需要这样做。

部署此服务的服务器是加入域的机器。该服务目前在网络服务上运行,我可以看到调用用户。我不想在服务器中将所有用户都添加为管理员。

我尝试动态创建计划任务,在授予对本地策略的访问权限(作为批处理服务登录)和对 C:\Windows\system32\tasks 下的文件夹的访问权限给组(创建为这种类型的用户,所有用户都属于这个组)。选项“运行任务时,使用以下用户帐户”被设置为调用者用户(User1),但我无法设置选项“无论用户是否登录都运行”。这个选项是必需的,因为当我需要触发查询时,它应该在 User1 下工作,并且 user1 永远不会登录到机器。

任何建议都会有所帮助。如果有任何其他方法更适合我的要求,我也愿意不采用计划任务方法的想法。

谢谢。 Girija Shankar Beuria

【问题讨论】:

    标签: c# sql-server scheduled-tasks background-process


    【解决方案1】:

    一种方法是创建一个存储过程来执行您想要完成的任务。在 SP 中,您可以执行您想要的任何登录名/用户。使用 SQL 代理来安排任务。这些都很容易做到,并且 SQL Server 在线书籍有详细的信息和示例,所以只需在那里查找即可。

    顺便说一句,我假设您是实例上的 DBA,因此您有权在任何登录名/用户上运行 EXECUTE AS。

    【讨论】:

    • SQLmojoe,感谢您查看我的问题。但我的问题是它会如何: 1. 查询 MDX 2. 查询表格 3. 将结果保存在 excel 中。另外我想查询一些服务来获取数据并保存在excel中。根据用户对数据的偏好(如 SQL 数据库、SSAS 多维数据集、表格、Rest 服务、WCF 服务等),我的每个作业的来源都会有所不同。很抱歉没有在前面提到。如果我尝试您的方法,我想这将很难做到。 - 吉里哈
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    相关资源
    最近更新 更多