Preskočiť na obsah
Skript

Linked servery – inventár

Všetky linked servery s providerom, cieľom, katalógom a voľbami RPC / data access, plus mapovanie loginov: kto sa na druhý server hlási vlastným účtom a kto pod spoločným SQL loginom.

linked-servery-inventar.sql 43 riadkov · T-SQL
Parametre skriptu doplň a kopíruj hotový skript
/* DeadlockCafe | Linked servery – inventár
   Účel:  Všetky linked servery s providerom, cieľom, katalógom a voľbami RPC / data access, plus mapovanie loginov: kto sa na druhý server hlási vlastným účtom a kto pod spoločným SQL loginom.
   Režim: READ ONLY | SQL Server 2016 – 2022, on-premises
*/
SET NOCOUNT ON;

-- 1) linked servery
SELECT s.server_id,
       s.name                     AS linked_server,
       s.product,
       s.provider,
       s.data_source,
       s.[catalog],
       s.is_rpc_out_enabled,
       s.is_data_access_enabled,
       s.is_remote_login_enabled,
       s.connect_timeout,
       s.query_timeout,
       s.modify_date
FROM sys.servers AS s
WHERE s.is_linked = 1
ORDER BY s.name;

-- 2) mapovanie loginov (heslá sa nezobrazujú – katalóg ich neobsahuje)
SELECT s.name AS linked_server,
       CASE WHEN ll.local_principal_id = 0 THEN N'(všetci ostatní)'
            ELSE ISNULL(sp.name, N'principal_id ' + CONVERT(nvarchar(12), ll.local_principal_id)) END AS local_login,
       ll.uses_self_credential,
       ll.remote_name,
       CASE WHEN ll.local_principal_id = 0 AND ll.uses_self_credential = 0 AND ll.remote_name IS NOT NULL
                 THEN N'RIZIKO: každý login servera sa pripája ako ' + ll.remote_name
            WHEN ll.uses_self_credential = 0 AND ll.remote_name IS NOT NULL
                 THEN N'pevný vzdialený login'
            WHEN ll.uses_self_credential = 1
                 THEN N'vlastné prihlasovacie údaje (Windows účty potrebujú Kerberos delegáciu)'
            ELSE N'' END AS note,
       ll.modify_date
FROM sys.linked_logins AS ll
JOIN sys.servers AS s ON s.server_id = ll.server_id
LEFT JOIN sys.server_principals AS sp ON sp.principal_id = ll.local_principal_id
WHERE s.is_linked = 1
ORDER BY s.name, CASE WHEN ll.local_principal_id = 0 THEN 1 ELSE 0 END, local_login;
## Kedy použiť

Pred migráciou (linked servery sa musia preniesť a otestovať), pri bezpečnostnom audite alebo keď sa zistí, že dotaz ide „cez linku“ a nikto nevie kam.

## Ako čítať výsledok

Prvá sada: linked servery – `data_source` je cieľ (server, súbor, DSN), `is_rpc_out_enabled` = dá sa volať `EXEC ... AT`, `is_data_access_enabled` = dá sa robiť `SELECT` cez štvordielne meno. Druhá sada: mapovania loginov. `local_login` = „(všetci ostatní)“ a `uses_self_credential = 0` so zadaným `remote_name` znamená, že **každý** login servera sa na cieľ pripája ako ten istý vzdialený účet – to je najčastejšia bezpečnostná diera.

> [!WARNING]
> Heslá vzdialených loginov sa z katalógu nedajú a nesmú čítať – pri migrácii ich treba poznať alebo použiť nástroj, ktorý ich prenesie (napr. dbatools `Copy-DbaLinkedServer`). `provider_string` vidí len login s `ALTER ANY LINKED SERVER`. Neprístupnosť cieľa skript netestuje.

**Oprávnenia:** Viditeľnosť linked serverov (štandardne cez public mapovanie; inak `ALTER ANY LINKED SERVER` / `setupadmin`). Na SQL Server 2022 `VIEW SERVER SECURITY STATE`.  
**Režim:** READ ONLY · **Verzia:** SQL Server 2016 – 2022

## Súvisiace recepty

- [Bezpečnostný baseline inštancie](script.php?id=53&s=bezpecnostny-baseline-instancie)
- [Identita a konfigurácia inštancie](script.php?id=11&s=identita-a-konfiguracia-instancie)
- [Migrácia databázy na nový server – checklist](script.php?id=62&s=migracia-databazy-na-novy-server-checklist)

## Zdroje

- [sys.servers](https://learn.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-servers-transact-sql)
- [sys.linked_logins](https://learn.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-linked-logins-transact-sql)

_Skript je staticky overený proti dokumentácii Microsoft Learn (názvy DMV, stĺpcov a hodnôt), nie spustený na živom serveri. Pred použitím na PROD ho vyskúšaj na TEST._