How to deny writes in all SQL Server databases (including new ones & restored ones)
If you could live with a finite time (minimum 10-seconds) between executions to catch new/restored databases, you could create a scheduled SQL Server Agent Job and put something like this in a T-SQL Job Step:-
SET NOCOUNT ON
DECLARE @command nvarchar(max) ;
SET @command =
N'SET NOCOUNT ON
DECLARE @UserName sysname ;
SELECT @UserName = USRS.[name]
FROM sys.database_principals AS USRS
INNER JOIN sys.server_principals AS LGNS ON LGNS.[sid] = USRS.[sid]
WHERE LGNS.[name] = ''LoginName'' ;
IF IS_ROLEMEMBER(''db_denydatawriter'', @UserName) = 0
BEGIN
EXEC sp_addrolemember ''db_denydatawriter'', @UserName ;
END ;' ;
EXEC sp_ineachdb
@command = @command,
@state_desc = N'ONLINE',
@is_read_only = 0 ;