| :linkattrs: |
| = Gerrit Code Review - User Privacy |
| |
| == Purpose |
| |
| This page documents how Gerrit handles user data. |
| |
| |=== |
| | Note: Gerrit has extensive support for link:config-plugins.html[plugins] |
| which extend Gerrits functionality, and these plugins could access, export, or |
| maniuplate user data. This document only focuses on the behavior of Gerrit |
| core and its link:dev-core-plugins.html[core plugins]. |
| |=== |
| |
| == Types of User Data |
| |
| Gerrit stores account data required for collaborating on source code changes. |
| This data is described by |
| link:config-accounts.html#account-data-in-user-branch[Account Data in User |
| Branch] and includes link:config-accounts.html#external-ids[External IDs], |
| link:config-accounts.html#preferences[User Preferences], |
| link:config-accounts.html#project-watches[Project Watches] and personally |
| identifiable information, including name and email address. The email |
| address is required to associate Git commits with a Gerrit user account. All |
| data except passwords is made accessible to other users who you are visible to, |
| as detailed below. |
| |
| == User Visibility |
| |
| Gerrit has a concept of link:config-gerrit.html#accounts[account visibility] |
| which determines what users a given user can see. This visibility configuration |
| applies in account search, reviewer suggestion, and when accessing data through |
| the link:rest-api-accounts.html#account-endpoints[Account REST endpoints]. If |
| you can see a user, you have read access to most of the |
| link:rest-api-accounts.html#account-info[AccountInfo] for that user, including |
| name and email address. Additional information, including secondary emails, is |
| included in AccountInfo if the caller has “Modify Account” permissions. |
| |
| Additionally, all users on a change (author, cc’d, reviewer) can see each other, |
| irrespective of the account visibility settings. For example: Say you are a |
| reviewer on a change where user Foo is also a reviewer. Even if by account |
| visibility you could not search for Foo, you'd still see their avatar, name, |
| and email now because you can see the change; this information is required to |
| collaborate on a code review. If Foo wasn't on that change, you could not add |
| them because reviewer suggestions would not find them due to the account |
| visibility settings. |
| |
| By default, account visibility on a Gerrit instance is set to `ALL` which allows |
| all users to be visible to other users, even anonymous (i.e. unauthenticated) |
| users. Depending on your installation type, you may want to change this: |
| |
| * For completely company-internal Gerrit installations (no external users), the |
| `ALL` default may make sense. |
| |
| * If you work with multiple vendors who have |
| access to their own independent sets of repos, `VISIBLE_GROUP` may be more |
| appropriate as you wouldn’t want vendor A to see accounts from vendor B. |
| |
| * For public installations, e.g. for open source projects, you may want to |
| change this setting or add a notice for users when they create an account e.g. |
| “Most of what you submit on this site, including your email address and name, |
| will be visible to others who use this service. You may prefer to use an email |
| account specifically for this purpose.” One way to do this is using |
| link:config-gerrit.html[`auth.registerPageUrl`] in `gerrit.config`. |
| |
| == ACLs and User Visibility |
| |
| User suggestions for changes, when adding a reviewer or cc-ing someone, always |
| respect ACLs for that change: only users who can see the change are suggested. |
| The suggested users are an intersection of who you can see and who can see the |
| change. |
| |
| Consider the following situation: |
| |
| * `READ` permission for Registered Users on the host |
| * User visibility is set to `VISIBILE_GROUP`, so only users of the same domain can |
| see each other |
| * a@foo.com creates change 123 |
| |
| This would mean: |
| |
| * a@foo.com cannot add b@bar.com to the change because these users cannot see |
| each other due to the user visibility setting. |
| * b@bar.com can find change 123 |
| because they have READ permission and could add themselves to the change. |
| * a@foo.com would then be able to see b@bar.com’s name, avatar, and email on |
| change 123 |
| |
| The only caveat to the above are Private Changes, which are only visible to the |
| owner and reviewers; reviewers can only see the change once they are added to |
| the change (if ACLs allow them to be added in the first place), not before. |
| |
| ## Right to be Forgotten Limitations |
| |
| As a source control system, Gerrit has limited abilities to remove personally |
| identifiable information. Notably, Gerrit cannot: |
| |
| * Remove a user's e-mail from all existing commits |
| * Remove a user's username |
| |
| There is also a known |
| link:https://bugs.chromium.org/p/gerrit/issues/detail?id=14185[bug] where a |
| user's username is stored in metadata for link:user-attention-set.html[Attention |
| Set]. |
| |
| |
| ## Open Source Software Limitations |
| |
| Gerrit is open-source software licensed under the Apache 2.0 license. Unless |
| required by applicable law or agreed to in writing, software distributed under |
| the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS |
| OF ANY KIND, either express or implied. See the License for the specific |
| language governing permissions and limitations under the License. |