## 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._
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.
/* 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;