That’s a very sound approach. I don’t think I would change that much. Let’s keep everything until step 4.
So, you have a relation/query of all matching reports, and then a user-specific boolean column to indicate whether they have read it or not.
If you haven’t, add an “Added at” column to your reports table, that stores the timestamp at the point of adding.
For your “Clear all Alerts” button, add a “Last clear all” column to your users table. The “Clear all Alerts” button would write the current timestamp to that column, in your signed-in user’s row.
Filter your matching alerts by either “Show Alert = True” (I would have assumed you do something like “Read?”, and hide an item when “Read” is true instead), OR the “Added at” column is before “Clear all Alerts”.