在我们的环境中,用户被授予对 tempdb 数据库 (dev/qa/prod) 的读/写/ddladmin 权限。当 SQL 服务重新启动时,这些权限将丢失,因为 tempdb 每次都会重新生成。当前采用的一种解决方案是 - 在 SQLAgent 启动时从 SQL Agent 作业重新应用权限脚本。这是不准确的,因为用户/权限会随着时间的推移而修改。另一个想法是每天备份 tempdb 权限(使用 15 天保留策略),并使用相同的作业来选择最新的文件,以便在 SQL 重新启动时重新应用权限。这是解决问题的准确方法吗?
谢谢!!
修改模型的替代方法可能是在主数据库中创建一个存储过程,其中包含您需要做的任何事情。然后将其标记为启动过程(sp_procoption)。
您可能必须在其中放入 WAITFOR,以防 SQL Server 在恢复模型和创建 tempdb 之前执行此操作。供你玩。
我只是偶尔使用启动过程,所以一定要进行彻底的测试。
而且,我完全同意 JD:如果可能的话,改为修改它们的工作。
如果您阅读了您链接的 StackOverflow 上最受接受的答案,它会后退一步并询问“为什么要为 TempDB 上的用户创建权限”这个问题?用户无需在其中创建、访问和管理临时对象。您提到的权限已经隐式授予对服务器具有连接访问权限的所有用户,用于临时对象。因此,您不必担心会重新创建 TempDB。
(这些权限唯一重要的是如果您希望您的用户在 TempDB 数据库中创建非临时对象,这没有意义,并且比权限本身更需要管理。)