1. Wstęp
Poniżej opisany jest opcjonalny wariant utrzymania katalogów template SQL Server Management Studio 22.5 przy użyciu mechanizmu symlink albo junction w systemie Windows.
Jest to kontynuacja artykułu: Porządkowanie Template Explorer w SQL Server Management Studio 22.5
Rozwiązanie może być zastosowane jako rozszerzenie podstawowej procedury porządkowania Template Explorer.
Wariant z linkami katalogów pozwala przechowywać własne template bezpośrednio w repozytorium Git, a następnie udostępniać je w katalogach używanych przez SSMS.
Dzięki temu katalogi takie jak Maintenance albo _User mogą wskazywać bezpośrednio na katalogi znajdujące się w repozytorium.
2. Założenie rozwiązania
Standardowo SSMS używa dwóch lokalizacji template:
- katalogu instalacyjnego SSMS,
- katalogu użytkownika w profilu Windows.
Katalog instalacyjny SSMS:
C:\Program Files\Microsoft SQL Server Management Studio 22\Release\Common7\IDE\SqlWorkbenchProjectItems\Sql
Katalog template użytkownika:
C:\Users\UserName\AppData\Roaming\Microsoft\SQL Server Management Studio\22.0\Templates\Sql
W wariancie opcjonalnym można pozostawić podstawową strukturę katalogów, ale wybrane katalogi podpiąć jako linki do repozytorium Git.
Przykład repozytorium:
D:\DBA\Git\SSMS-Templates
├── README.md
├── Maintenance
└── User
Przykładowe mapowanie:
C:\Program Files\Microsoft SQL Server Management Studio 22\Release\Common7\IDE\SqlWorkbenchProjectItems\Sql\Maintenance
-> D:\DBA\Git\SSMS-Templates\Maintenance
oraz opcjonalnie:
C:\Users\UserName\AppData\Roaming\Microsoft\SQL Server Management Studio\22.0\Templates\Sql\_User
-> D:\DBA\Git\SSMS-Templates\User
3. Rekomendowany zakres użycia linków
Nie zaleca się zastępowania całego katalogu Sql linkiem do repozytorium.
Nie zaleca się struktury:
Sql -> D:\DBA\Git\SSMS-Templates
Bezpieczniejszym rozwiązaniem jest podpięcie tylko wybranych katalogów własnych.
Rekomendowana struktura:
Sql
├── Default
├── Maintenance -> junction do repozytorium Git
└── _User -> junction do repozytorium Git albo zwykły katalog lokalny
Katalog Default powinien pozostać zwykłym katalogiem, ponieważ zawiera domyślne template SSMS dostarczone przez instalator.
Katalogi Maintenance i _User mogą być powiązane z repozytorium, ponieważ zawierają template własne.
4. Symlink a junction w Windows
W Windows można użyć kilku mechanizmów linkowania katalogów. Dla tego scenariusza praktyczne znaczenie mają głównie dwa warianty:
- directory symbolic link,
- junction.
4.1. Directory symbolic link
Directory symbolic link tworzy się poleceniem:
mklink /D "link" "target"
Przykład:
mklink /D "C:\Program Files\Microsoft SQL Server Management Studio 22\Release\Common7\IDE\SqlWorkbenchProjectItems\Sql\Maintenance" "D:\DBA\Git\SSMS-Templates\Maintenance"
Zalety:
- jest to klasyczny link symboliczny,
- jednoznacznie wskazuje na katalog docelowy,
- może wskazywać również na niektóre lokalizacje sieciowe.
Wady:
- może wymagać uruchomienia konsoli jako administrator,
- może wymagać włączonego Developer Mode w Windows,
- niektóre starsze aplikacje mogą gorzej obsługiwać symbolic links niż junction.
4.2. Junction
Junction tworzy się poleceniem:
mklink /J "link" "target"
Przykład:
mklink /J "C:\Program Files\Microsoft SQL Server Management Studio 22\Release\Common7\IDE\SqlWorkbenchProjectItems\Sql\Maintenance" "D:\DBA\Git\SSMS-Templates\Maintenance"
Zalety:
- bardzo dobrze działa dla lokalnych katalogów NTFS,
- zwykle jest lepiej tolerowany przez starsze aplikacje,
- dobrze sprawdza się przy podpinaniu katalogów aplikacji do lokalnego repozytorium,
- w tym scenariuszu jest zwykle najbezpieczniejszym wyborem.
Wady:
- działa dla katalogów lokalnych,
- nie jest tak uniwersalny jak klasyczny symbolic link.
Dla katalogów template SSMS zalecane jest użycie junction, czyli mklink /J.
5. Proponowany model z repozytorium Git
Repozytorium Git może mieć następującą strukturę:
D:\DBA\Git\SSMS-Templates
├── README.md
├── Maintenance
│ ├── Backup
│ ├── DBCC
│ ├── Indexes
│ ├── Statistics
│ ├── Jobs
│ ├── Sessions
│ ├── Blocking
│ └── Permissions
└── User
├── Test
├── Temp
└── Personal
Katalog Maintenance przechowuje wspólne template administracyjne DBA.
Katalog User przechowuje prywatne lub robocze template użytkownika, jeżeli zdecydowano się je wersjonować.
Nie należy przechowywać w repozytorium danych wrażliwych, haseł, loginów, nazw klientów, connection stringów ani danych produkcyjnych.
6. Wariant rekomendowany
Najbardziej praktyczny wariant zakłada użycie junction dla katalogu Maintenance oraz opcjonalnie dla katalogu _User.
Katalog instalacyjny SSMS:
C:\Program Files\Microsoft SQL Server Management Studio 22\Release\Common7\IDE\SqlWorkbenchProjectItems\Sql
├── Default
└── Maintenance -> D:\DBA\Git\SSMS-Templates\Maintenance
Katalog użytkownika SSMS:
C:\Users\UserName\AppData\Roaming\Microsoft\SQL Server Management Studio\22.0\Templates\Sql
├── Default
├── Maintenance
└── _User -> D:\DBA\Git\SSMS-Templates\User
W tym wariancie:
Defaultpozostaje zwykłym katalogiem,Maintenancew katalogu instalacyjnym wskazuje na repozytorium Git,_Usermoże wskazywać na repozytorium Git albo pozostać zwykłym katalogiem lokalnym,- po aktualizacji SSMS należy sprawdzić, czy link w katalogu instalacyjnym nadal istnieje.
7. Wariant z natychmiastową synchronizacją Maintenance
Jeżeli zmiany w Maintenance mają być natychmiast widoczne w Template Explorer, można podpiąć Maintenance również w katalogu użytkownika.
Katalog użytkownika:
C:\Users\UserName\AppData\Roaming\Microsoft\SQL Server Management Studio\22.0\Templates\Sql
├── Default
├── Maintenance -> D:\DBA\Git\SSMS-Templates\Maintenance
└── _User -> D:\DBA\Git\SSMS-Templates\User
Ten wariant jest wygodny, ponieważ zmiany wykonane w repozytorium są od razu widoczne w katalogu użytkownika SSMS.
Należy jednak pamiętać, że edycja template z poziomu SSMS będzie bezpośrednio zmieniać pliki w repozytorium Git.
Po każdej zmianie warto wykonać:
cd /d D:\DBA\Git\SSMS-Templates
git status
8. Procedura wdrożenia
8.1. Zamknięcie SSMS
Przed rozpoczęciem zmian należy zamknąć wszystkie uruchomione instancje SQL Server Management Studio.
8.2. Utworzenie katalogu repozytorium
Przykład:
mkdir D:\DBA\Git\SSMS-Templates
cd /d D:\DBA\Git\SSMS-Templates
git init
Następnie należy utworzyć katalogi:
mkdir Maintenance
mkdir User
8.3. Skopiowanie istniejących template do repozytorium
Przykład dla katalogu Maintenance:
robocopy "C:\Program Files\Microsoft SQL Server Management Studio 22\Release\Common7\IDE\SqlWorkbenchProjectItems\Sql\Maintenance" "D:\DBA\Git\SSMS-Templates\Maintenance" /E
Przykład dla katalogu _User:
robocopy "C:\Users\UserName\AppData\Roaming\Microsoft\SQL Server Management Studio\22.0\Templates\Sql\_User" "D:\DBA\Git\SSMS-Templates\User" /E
Przed usunięciem katalogów źródłowych należy sprawdzić, czy dane zostały poprawnie skopiowane.
8.4. Usunięcie dotychczasowych katalogów w lokalizacjach SSMS
Po wykonaniu kopii do repozytorium można usunąć stare katalogi, które mają zostać zastąpione przez junction.
Usunięcie katalogu Maintenance z katalogu instalacyjnego:
rmdir /S /Q "C:\Program Files\Microsoft SQL Server Management Studio 22\Release\Common7\IDE\SqlWorkbenchProjectItems\Sql\Maintenance"
Opcjonalne usunięcie katalogu _User z profilu użytkownika:
rmdir /S /Q "C:\Users\UserName\AppData\Roaming\Microsoft\SQL Server Management Studio\22.0\Templates\Sql\_User"
Należy upewnić się, że dane znajdują się już w repozytorium Git.
8.5. Utworzenie junction dla Maintenance
Polecenie należy uruchomić w konsoli CMD z uprawnieniami administratora, ponieważ lokalizacja docelowa znajduje się w Program Files.
mklink /J "C:\Program Files\Microsoft SQL Server Management Studio 22\Release\Common7\IDE\SqlWorkbenchProjectItems\Sql\Maintenance" "D:\DBA\Git\SSMS-Templates\Maintenance"
8.6. Utworzenie junction dla _User
Opcjonalnie można podpiąć katalog _User do repozytorium:
mklink /J "C:\Users\UserName\AppData\Roaming\Microsoft\SQL Server Management Studio\22.0\Templates\Sql\_User" "D:\DBA\Git\SSMS-Templates\User"
Ten krok jest opcjonalny.
Jeżeli template użytkownika mają pozostać prywatne i lokalne, katalog _User można zostawić jako zwykły katalog w profilu użytkownika.
8.7. Opcjonalne utworzenie junction dla Maintenance w katalogu użytkownika
Jeżeli katalog Maintenance ma być widoczny bezpośrednio z repozytorium również w profilu użytkownika, można utworzyć dodatkową junction:
mklink /J "C:\Users\UserName\AppData\Roaming\Microsoft\SQL Server Management Studio\22.0\Templates\Sql\Maintenance" "D:\DBA\Git\SSMS-Templates\Maintenance"
Ten wariant pozwala uniknąć sytuacji, w której SSMS korzysta z wcześniej skopiowanej wersji katalogu Maintenance w profilu użytkownika.
8.8. Sprawdzenie utworzonych linków
Sprawdzenie katalogu instalacyjnego:
dir "C:\Program Files\Microsoft SQL Server Management Studio 22\Release\Common7\IDE\SqlWorkbenchProjectItems\Sql"
Oczekiwany wynik powinien zawierać wpis podobny do:
<JUNCTION> Maintenance [D:\DBA\Git\SSMS-Templates\Maintenance]
Sprawdzenie katalogu użytkownika:
dir "C:\Users\UserName\AppData\Roaming\Microsoft\SQL Server Management Studio\22.0\Templates\Sql"
Oczekiwany wynik dla _User:
<JUNCTION> _User [D:\DBA\Git\SSMS-Templates\User]
8.9. Uruchomienie SSMS
Po utworzeniu linków należy uruchomić SSMS i otworzyć Template Explorer:
View -> Template Explorer
albo:
Ctrl + Alt + T
Należy sprawdzić, czy katalogi Maintenance oraz _User są widoczne i czy zawierają oczekiwane template.
9. Kontrola po aktualizacji SSMS
Katalog instalacyjny SSMS jest zarządzany przez instalator.
Oznacza to, że podczas:
- aktualizacji SSMS,
- naprawy instalacji SSMS,
- reinstalacji SSMS,
- instalacji kolejnej wersji SSMS,
katalog:
C:\Program Files\Microsoft SQL Server Management Studio 22\Release\Common7\IDE\SqlWorkbenchProjectItems\Sql
może zostać nadpisany, przywrócony do stanu domyślnego albo odtworzony od nowa.
W takiej sytuacji junction:
Maintenance -> D:\DBA\Git\SSMS-Templates\Maintenance
może zostać usunięta.
Po każdej aktualizacji SSMS należy sprawdzić, czy katalog Maintenance nadal jest linkiem do repozytorium.
Polecenie kontrolne:
dir "C:\Program Files\Microsoft SQL Server Management Studio 22\Release\Common7\IDE\SqlWorkbenchProjectItems\Sql"
Jeżeli link został usunięty, należy odtworzyć go poleceniem:
mklink /J "C:\Program Files\Microsoft SQL Server Management Studio 22\Release\Common7\IDE\SqlWorkbenchProjectItems\Sql\Maintenance" "D:\DBA\Git\SSMS-Templates\Maintenance"
10. Zasady bezpieczeństwa
10.1. Nie linkować katalogu Default
Katalog Default powinien pozostać zwykłym katalogiem.
Zawiera on domyślne template SSMS, które mogą zmieniać się między wersjami SSMS.
Linkowanie katalogu Default do repozytorium może utrudnić aktualizacje oraz porównanie zmian po instalacji nowej wersji SSMS.
10.2. Nie linkować całego katalogu Sql
Nie zaleca się zastępowania całego katalogu:
C:\Program Files\Microsoft SQL Server Management Studio 22\Release\Common7\IDE\SqlWorkbenchProjectItems\Sql
linkiem do repozytorium.
Bezpieczniej jest linkować tylko wybrane katalogi własne, takie jak:
Maintenance
_User
10.3. Zachować ostrożność przy usuwaniu linków
Usunięcie junction poleceniem:
rmdir "ścieżka_do_junction"
powinno usunąć sam punkt połączenia, a nie katalog docelowy.
Nie należy jednak usuwać zawartości katalogu widocznego przez junction bez świadomości, że operacja dotyczy realnych plików w repozytorium Git.
Przykład: usunięcie pliku z katalogu:
C:\Users\UserName\AppData\Roaming\Microsoft\SQL Server Management Studio\22.0\Templates\Sql\_User
może faktycznie usunąć plik z:
D:\DBA\Git\SSMS-Templates\User
10.4. Kontrolować zmiany w Git
Jeżeli katalogi template są podpięte do repozytorium, każda edycja wykonana z poziomu SSMS może zmienić pliki w repozytorium.
Po zmianach należy kontrolować stan repozytorium:
cd /d D:\DBA\Git\SSMS-Templates
git status
Przykładowy zapis zmian:
git add .
git commit -m "Update SSMS maintenance templates"
10.5. Nie przechowywać sekretów w repozytorium
W template nie należy przechowywać:
- haseł,
- loginów,
- tokenów,
- kluczy API,
- connection stringów,
- danych osobowych,
- danych klientów,
- nazw środowisk produkcyjnych, jeżeli nie powinny być wersjonowane,
- danych produkcyjnych.
Template powinny być uniwersalne, parametryzowane i bezpieczne do przechowywania w repozytorium.
11. Zalecany wariant końcowy
Najbardziej zalecany wariant to użycie junction dla katalogu Maintenance w katalogu instalacyjnym SSMS oraz opcjonalnie dla katalogu _User w profilu użytkownika.
Polecenie dla Maintenance:
mklink /J "C:\Program Files\Microsoft SQL Server Management Studio 22\Release\Common7\IDE\SqlWorkbenchProjectItems\Sql\Maintenance" "D:\DBA\Git\SSMS-Templates\Maintenance"
Polecenie dla _User:
mklink /J "C:\Users\UserName\AppData\Roaming\Microsoft\SQL Server Management Studio\22.0\Templates\Sql\_User" "D:\DBA\Git\SSMS-Templates\User"
Opcjonalnie, dla natychmiastowej synchronizacji Maintenance w profilu użytkownika:
mklink /J "C:\Users\UserName\AppData\Roaming\Microsoft\SQL Server Management Studio\22.0\Templates\Sql\Maintenance" "D:\DBA\Git\SSMS-Templates\Maintenance"
12. Podsumowanie
Użycie junction albo symlink dla katalogów template SSMS jest dobrym rozwiązaniem opcjonalnym, jeżeli template mają być utrzymywane w repozytorium Git.
Najbezpieczniejsze podejście to:
- nie linkować całego katalogu
Sql, - nie linkować katalogu
Default, - linkować wyłącznie katalogi własne, takie jak
Maintenancei opcjonalnie_User, - preferować
mklink /Jzamiastmklink /Ddla lokalnych katalogów NTFS, - po każdej aktualizacji SSMS sprawdzać, czy junction nadal istnieje,
- regularnie kontrolować zmiany w repozytorium Git.
Wariant z linkami powinien być traktowany jako element opcjonalny.
Podstawowa dokumentacja porządkowania Template Explorer pozostaje poprawna bez użycia symlink/junction. Mechanizm linków jest dodatkowym usprawnieniem dla środowisk, w których template mają być wersjonowane i łatwo odtwarzane z repozytorium.