Keeping track of players on a networked game

So I've got a client-server application, that uses Network.Instantiate to spawn the player objects, depending on how many players join. But how do I keep track of which player object is which connections, and how to I make sure that one client can only move his own player object?

The first one could probably be done with OnPlayerConnected, then keep a List I suppose (input appreciated), but as for the second question I have no idea. Do I have to spawn "dummy" player characters, or is there a way to easily use the networkView's sync?

If the prefab has a networkView component, Network.Instantiate by default spawns "dummy" players, in the sense that it spawns an instance of the prefab in every network instance of the game, but only the owner of the networkView can directly control input on the prefab (with Network.Instantiate, the owner is by default the person who called the Network.Instantiate code).

I would look at the Networking Example package for guidance on how to set up a PlayerNetworkInit script for the player prefab to enable/disable relevant scripts in OnNetworkInstantiate(), but its basically like:

OnConnectedToServer() -> Network.Instantiate a prefab for me, so I am the owner (OnConnectedToServer() is called for everyone individually when they connect to the session)

OnNetworkInstantiate() (on the prefab that was instantiated) -> check if(networkView.IsMine), enable control scripts; else, this is a remote instance, disable control scripts.