### đź”— Connexion (depuis un poste Windows)
#### Se connecter Ă un serveur SQL Server
```powershell
sqlcmd -S $serveur$ -U $user -P $password
```
Permet de se connecter à une base de données SQL Server depuis un terminal Windows en utilisant **sqlcmd**.
- `$serveur
: Nom ou adresse IP du serveur SQL
- `$user
: Nom d’utilisateur
- `$password
: Mot de passe
> [!Astuce]
> Si l’authentification Windows est utilisée, remplace `-U $user$ -P $password` par `-E` pour utiliser l'utilisateur actuel.
---
### 🚀 Requêtes de base
#### Lister les bases de données
```sql
SELECT name FROM master.sys.databases;
```
Affiche la liste des bases de données disponibles sur le serveur SQL.
#### Sélectionner une base de données
```sql
USE <nom_base_de_données>;
```
Permet de choisir une base de données spécifique pour exécuter les requêtes suivantes.
#### Lister les tables d’une base de données
```sql
SELECT * FROM information_schema.tables;
```
Renvoie la liste des tables présentes dans la base de données en cours.
#### Lister les serveurs liés
```sql
EXEC sp_linkedservers
SELECT * FROM sys.servers;
```
Affiche les serveurs SQL Server liés permettant d’effectuer des requêtes inter-serveurs.
#### Lister les utilisateurs SQL Server
```sql
SELECT sp.name AS login, sp.type_desc AS login_type, sl.password_hash,
sp.create_date, sp.modify_date,
CASE WHEN sp.is_disabled = 1 THEN 'Disabled' ELSE 'Enabled' END AS status
FROM sys.server_principals sp
LEFT JOIN sys.sql_logins sl ON sp.principal_id = sl.principal_id
WHERE sp.type NOT IN ('G', 'R')
ORDER BY sp.name;
```
Affiche la liste des utilisateurs SQL, leurs statuts (activé/désactivé) et d’autres informations.
> [!Astuce]
> Utile pour vérifier les comptes SQL et leurs statuts de connexion.
---
### đź’» Activer `xp_cmdshell`
#### Activer l’exécution de commandes système
```sql
sp_configure 'show advanced options', '1'
RECONFIGURE
sp_configure 'xp_cmdshell', '1'
RECONFIGURE
```
Active l'option **xp_cmdshell**, qui permet d’exécuter des commandes système depuis SQL Server.
---
### ⚡ Exécuter une commande système
```sql
EXEC master..xp_cmdshell 'whoami'
```
Exécute la commande `whoami` directement depuis SQL Server et affiche l’utilisateur en cours.
> [!Astuce]
> Peut être utilisé pour vérifier les permissions du compte SQL Server sur le système.
---
### 📝 Lire / Écrire un fichier
#### Vérifier si nous avons la permission de lire un fichier
```sql
SELECT * FROM fn_my_permissions(NULL, 'SERVER')
WHERE permission_name='ADMINISTER BULK OPERATIONS'
OR permission_name='ADMINISTER DATABASE BULK OPERATIONS';
```
Affiche les permissions actuelles de l’utilisateur SQL pour la lecture et l’importation de fichiers.
#### Lire un fichier depuis le système
```sql
SELECT * FROM OPENROWSET(BULK N'C:/Windows/System32/drivers/etc/hosts', SINGLE_CLOB) AS Contents
```
Lit le contenu du fichier spécifié et affiche son contenu sous forme de texte.
> [!Astuce]
> Utile pour lire les fichiers système directement via SQL Server.
#### Écrire dans un fichier (nécessite des droits d’administrateur)
```sql
sp_configure 'show advanced options', 1
RECONFIGURE
sp_configure 'Ole Automation Procedures', 1
RECONFIGURE
DECLARE @OLE INT
DECLARE @FileID INT
EXECUTE sp_OACreate 'Scripting.FileSystemObject', @OLE OUT
EXECUTE sp_OAMethod @OLE, 'OpenTextFile', @FileID OUT, 'c:\fichier.txt', 8, 1
EXECUTE sp_OAMethod @FileID, 'WriteLine', Null, 'Coucou :)'
EXECUTE sp_OADestroy @FileID
EXECUTE sp_OADestroy @OLE
```
Crée un fichier texte et y écrit du contenu directement depuis SQL Server.
- `sp_OACreate` : Crée une instance de l’objet **Scripting.FileSystemObject**
- `OpenTextFile` : Ouvre ou crée un fichier en mode écriture
- `WriteLine` : Écrit du texte dans le fichier