A method comprising: maintaining user data for each of a plurality of content provider systems, the user data comprising, for each of a plurality of users, data identifying user characteristics; maintaining a first distributed database, the first distributed database comprising for each of a plurality of users, a master public key and at least one data storage location on one of the content provider systems; maintaining a second distributed database, the second distributed database comprising, for each of a plurality of entities, data identifying users whose data is available to be accessed, and data recording accesses of user data by entities; and in response to a request for user data from a requesting entity, querying the second distributed database to determine users whose data is accessible to the requesting entity; querying the first distributed database to determine, for each of the determined users whose data is accessible to the requesting entity, one or more storage locations on the plurality of content provider systems; retrieving data from the determined one or more storage locations on the plurality of content provider systems; storing the retrieved data in a location accessible by the requesting entity; and recording in the second distributed database the requesting entity has accessed the retrieved data. maintaining user data for each of a plurality of content provider systems, the user data comprising, for each of a plurality of users, data identifying user characteristics; maintaining a first distributed database, the first distributed database comprising for each of a plurality of users, a master public key and at least one data storage location on one of the content provider systems; maintaining a second distributed database, the second distributed database comprising, for each of a plurality of entities, data identifying users whose data is available to be accessed, and data recording accesses of user data by entities; and in response to a request for user data from a requesting entity, querying the second distributed database to determine users whose data is accessible to the requesting entity; querying the first distributed database to determine, for each of the determined users whose data is accessible to the requesting entity, one or more storage locations on the plurality of content provider systems; retrieving data from the determined one or more storage locations on the plurality of content provider systems; storing the retrieved data in a location accessible by the requesting entity; and recording in the second distributed database the requesting entity has accessed the retrieved data. querying the second distributed database to determine users whose data is accessible to the requesting entity; querying the first distributed database to determine, for each of the determined users whose data is accessible to the requesting entity, one or more storage locations on the plurality of content provider systems; retrieving data from the determined one or more storage locations on the plurality of content provider systems; storing the retrieved data in a location accessible by the requesting entity; and recording in the second distributed database the requesting entity has accessed the retrieved data. <EOS>