When I try to run a simple query involving a linked server it fails:

    SELECT * FROM [server2].[DWH].[dbo].[SomeTable]

    Msg 18456, Level 14, State 1, Line 1
    Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'.

But, there is another user who can run this query without problems.

-----------------------

Our company doesn't have a SQL Server DBA and we have inherited a few SQL Servers from another company after acquisition.

I'm a developer trying to run some queries and I'm having hard time trying to figure out how to configure access correctly. I don't really know where to look, so I'll try to explain the current setup to the best of my ability.

There is Server1:

    Microsoft SQL Server 2012 (SP4) (KB4018073) - 11.0.7001.0 (X64) 
    	Aug 15 2017 10:23:29 
    	Copyright (c) Microsoft Corporation
    	Standard Edition (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)

There is Server2:

    Microsoft SQL Server 2016 (SP1-CU15-GDR) (KB4505221) - 13.0.4604.0 (X64) 
    	Jun 15 2019 07:56:34 
    	Copyright (c) Microsoft Corporation
    	Enterprise Edition: Core-based Licensing (64-bit) on Windows Server 2016 Datacenter 10.0 <X64> (Build 14393: ) (Hypervisor)


Our company has a domain `MAIN_DOMAIN` and I log into my Windows laptop as `MAIN_DOMAIN\my.name`. When I run SSMS on my laptop I can connect to both `Server1` and `Server2` using Windows authentication.

As far as I understand, my login in both SQL Servers has pretty much all the permissions:

Server1:

	CREATE LOGIN [MAIN_DOMAIN\my.name] FROM WINDOWS WITH DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english]
	ALTER SERVER ROLE [sysadmin] ADD MEMBER [MAIN_DOMAIN\my.name]
	ALTER SERVER ROLE [serveradmin] ADD MEMBER [MAIN_DOMAIN\my.name]
	ALTER SERVER ROLE [setupadmin] ADD MEMBER [MAIN_DOMAIN\my.name]
	ALTER SERVER ROLE [processadmin] ADD MEMBER [MAIN_DOMAIN\my.name]
	ALTER SERVER ROLE [diskadmin] ADD MEMBER [MAIN_DOMAIN\my.name]

Server2:

	CREATE LOGIN [MAIN_DOMAIN\my.name] FROM WINDOWS WITH DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english]
	ALTER SERVER ROLE [sysadmin] ADD MEMBER [MAIN_DOMAIN\my.name]
	ALTER SERVER ROLE [serveradmin] ADD MEMBER [MAIN_DOMAIN\my.name]
	ALTER SERVER ROLE [setupadmin] ADD MEMBER [MAIN_DOMAIN\my.name]

**The Server1 and Server2 themselves are not in `MAIN_DOMAIN`, they are in `other_domain.com`**

I can Remote Desktop to both of them using `other_domain\my.name` user with a different password than my main domain user.

This is how the linked server is configured on `Server1`:

	EXEC master.dbo.sp_addlinkedserver @server = N'server2', @srvproduct=N'SQL Server'
	EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'server2',@useself=N'True',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL

	EXEC master.dbo.sp_serveroption @server=N'server2', @optname=N'collation compatible', @optvalue=N'false'
	EXEC master.dbo.sp_serveroption @server=N'server2', @optname=N'data access', @optvalue=N'true'
	EXEC master.dbo.sp_serveroption @server=N'server2', @optname=N'dist', @optvalue=N'false'
	EXEC master.dbo.sp_serveroption @server=N'server2', @optname=N'pub', @optvalue=N'false'
	EXEC master.dbo.sp_serveroption @server=N'server2', @optname=N'rpc', @optvalue=N'true'
	EXEC master.dbo.sp_serveroption @server=N'server2', @optname=N'rpc out', @optvalue=N'true'
	EXEC master.dbo.sp_serveroption @server=N'server2', @optname=N'sub', @optvalue=N'false'
	EXEC master.dbo.sp_serveroption @server=N'server2', @optname=N'connect timeout', @optvalue=N'0'
	EXEC master.dbo.sp_serveroption @server=N'server2', @optname=N'collation name', @optvalue=null
	EXEC master.dbo.sp_serveroption @server=N'server2', @optname=N'lazy schema validation', @optvalue=N'false'
	EXEC master.dbo.sp_serveroption @server=N'server2', @optname=N'query timeout', @optvalue=N'0'
	EXEC master.dbo.sp_serveroption @server=N'server2', @optname=N'use remote collation', @optvalue=N'true'
	EXEC master.dbo.sp_serveroption @server=N'server2', @optname=N'remote proc transaction promotion', @optvalue=N'true'


On `Server1` the MSSQLSERVER service (sqlservr.exe) runs under user called `NT Service\MSSQLSERVER`.

On `Server2` the MSSQLSERVER service (sqlservr.exe) runs under user called `NT Service\MSSQLSERVER`.

[![sql server service user][1]][1]

-------------------

Here is output of `setspn -l`. I get the same output when I run it on `server1` or `server2`:

    C:\Windows\system32>setspn -l SERVER2
    Registered ServicePrincipalNames for CN=SERVER2,OU=Azure Resources,OU=Corporate,DC=other_domain,DC=com,DC=au:
            MSSQLSvc/SERVER2.other_domain.com.au:1433
            MSSQLSvc/SERVER2.other_domain.com.au
            WSMAN/SERVER2
            WSMAN/SERVER2.other_domain.com.au
            TERMSRV/SERVER2
            TERMSRV/SERVER2.other_domain.com.au
            RestrictedKrbHost/SERVER2
            HOST/SERVER2
            RestrictedKrbHost/SERVER2.other_domain.com.au
            HOST/SERVER2.other_domain.com.au
    
    C:\Windows\system32>setspn -l SERVER1
    Registered ServicePrincipalNames for CN=SERVER1,OU=Azure Resources,OU=Corporate,DC=other_domain,DC=com,DC=au:
            MSSQLSvc/SERVER1.other_domain.com.au:1433
            MSSQLSvc/SERVER1.other_domain.com.au
            Microsoft Virtual Console Service/SERVER1.other_domain.com.au
            Microsoft Virtual Console Service/SERVER1
            Microsoft Virtual System Migration Service/SERVER1.other_domain.com.au
            Microsoft Virtual System Migration Service/SERVER1
            Hyper-V Replica Service/SERVER1.other_domain.com.au
            Hyper-V Replica Service/SERVER1
            WSMAN/SERVER1
            WSMAN/SERVER1.other_domain.com.au
            TERMSRV/SERVER1.other_domain.com.au
            TERMSRV/SERVER1
            RestrictedKrbHost/SERVER1
            HOST/SERVER1
            RestrictedKrbHost/SERVER1.other_domain.com.au
            HOST/SERVER1.other_domain.com.au

Unfortunately, I don't understand what it means. The only thing that I understand here is that `MAIN_DOMAIN` is not mentioned anywhere.

---------------

A different user can run the query involving linked server without problems.

He logs into `Server1` using Remote Desktop and using `other_domain\his.name`. He runs SSMS on that `Server1` and connects to SQL Server using Windows authentication.

His login on `Server1` has all permissions as well:

	CREATE LOGIN [other_domain\his.name] FROM WINDOWS WITH DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english]
	ALTER SERVER ROLE [sysadmin] ADD MEMBER [other_domain\his.name]
	ALTER SERVER ROLE [serveradmin] ADD MEMBER [other_domain\his.name]

--------------

What do I need to configure, so that I could run a query involving linked server while I'm connected to SQL Server from my laptop using `MAIN_DOMAIN\my.name` ?


  [1]: https://i.sstatic.net/HpCPL.png