Cross-database permissions are quite tricky. So, similar to my answer here: > [What minimum permissions do I need to provide to a user so that it can check the status of SQL Server Agent Service?][1] I would suggest using [module signing][2] to accomplish this since, in the end, it will be more secure and yet less complex than the alternatives. This will require changing the View into a multi-statement Table-Valued Function so that it can be signed yet still be selected from. Just do the following: 1. In the DB containing this view, create a Certificate (my preference is to specify a password instead of relying upon the Database Master Key (DMK) for the protection). 1. Sign the TVF with the Certificate 1. Back up the Certificate to files (a **.cer** file for the Public Key a.k.a. "Certificate", and a **.pvk** file for the Private Key) 1. `USE [master];` 1. Create the same Certificate from the **.cer** file (no need to create the Private Key from the **.pvk**) file 1. Create a Login from that Certificate 1. Grant that Login whatever permissions are necessary to accomplish the goal (a.k.a. "git 'er done"). This might be a combination of `CONNECT ANY DATABASE` (I think that's in 2016) and something else, maybe even up to `CONTROL SERVER`. If no permission combination works, try instead to add this Login to the `sysadmin` fixed Server Role. The permissions granted to the Certificate-based Login are a bit much, _but_ that Login cannot be impersonated (i.e. `EXECUTE AS LOGIN = N'that_Login';`) and cannot log in; that Login is merely a container for the extra permissions and only ever apply to what has been signed with that Certificate, which in this case is just the one TVF, which is just a `SELECT` statement. [1]: https://dba.stackexchange.com/a/103275/30859 [2]: https://ModuleSigning.info/