向用户(在这种情况下为 AD 组)授予对所有当前和未来数据库的读取访问权限的最佳方法是什么?
目前我有一个不稳定的预定作业,它使用(将开始调试以下内容,但也许我做错了):
sp_msforeachdb '
USE [?]
CREATE USER [MY_DOMAIN\SQL-READ-ALL] FOR LOGIN [MY_DOMAIN\SQL-READ-ALL]
USE [?]
EXEC sp_addrolemember N''db_datareader'', N''MY_DOMAIN\SQL-READ-ALL''
'
也许有更好的方法?
对于未来的数据库,请这样做,因为所有数据库都是从
model
对于现有数据库,只需运行上面的内容,一次
关于恢复:您可以为AUDIT_BACKUP_RESTORE事件设置事件通知。不适合胆小的人,因为编写异步事件通知并不容易,但它可以完成您要求的工作。请参阅实现事件通知。
另一种选择是创建一个按计划运行的 SQL Server 代理作业,以便为所有数据库执行 SQL。
您还可以将代码包装在存储过程中,您可以在模型数据库或“实用程序”数据库中创建该存储过程。
下面是一种可能的实现(假设登录名和用户名相同,但可以修改以处理不同的登录名/用户名):
从计划每天运行或按所需计划运行的 SQL Server 代理作业,您可以像这样调用上面的代码: