Player State/Info

Got a question about where to keep player information and score. Need help with my dodgy designing.

So i need to store some information on the player for one. This includes, player id, network connection, local player id and possibly team.
This is needed by the gamemode to spawn a game player for each real life player.
This sounds like it should be a simple data class which maybe gets put in a game state or session state or something.

The player needs access to this information aswell though, and it needs to be on the player so any component attached to it can access it and use it. for example player controller needs to know local player id. UI element for the player might need to know player id for a name tag or something.
For all these scripts to access this the player info would then need to be a component on the player aswell so they can access it.

This is my first issue. It feels like a structure that doesn’t need to be a component, but the player components that need this information and then feels like a component. I could be forced to give each of these components a copy of the player info when I spawn it, but then it loses the ability to just add a component, and taking it has a player state component on it, can just be plug and go.

Hope that clear enough. I apologies if not

Edit:
A question that may solve my issue is.
Taking a i have a struct (playerinfo) that i want to be a struct and a component. (so hold in a list and to stick on to a game object) what is a way round this.
Is it to have a struct and then a component with the exact same data. basically a copy but is a class derived from monobehaviour?
or is there a more elegant solution?

I will stress that this information will be populate in the game so it shouldnt be baked in like a script object

I think what you need is called Scriptable Object, so you can create a single asset with this data and then reference it from any component you might need.