Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
GitHub Copilot in SQL Server Management Studio (SSMS) esegue query e comandi nel contesto dell'account di accesso. Questo articolo illustra il modello di esecuzione predefinito e come usare un database CONSTITUTION.md per specificare un determinato utente del database o un account di accesso SQL per impostare il contesto di esecuzione per il database.
Contesto di esecuzione predefinito
Tutte le query che GitHub Copilot in SSMS generano ed eseguono, sia in modalità Ask che in modalità Agente, vengono eseguite con l'utente o l'account di accesso usato per connettersi al database.
Annotazioni
La modalità agente di GitHub Copilot in SQL Server Management Studio (SSMS) è attualmente in anteprima.
Copilot non dispone di autorizzazioni separate e nessun accesso con privilegi elevati. Se l'utente o l'account di accesso non riesce a leggere una tabella, Copilot non può leggerla neanche.
Importante
Il sistema di approvazione in modalità agente non è un limite di sicurezza. Conferma la finalità prima di ogni azione, ma non limita le operazioni che Copilot possono eseguire oltre le autorizzazioni già concesse all'account di accesso. Il limite di sicurezza effettivo è l'applicazione delle autorizzazioni di SQL Server. Applicare il principio dei privilegi minimi: concedere agli utenti solo le SELECTautorizzazioni , EXECUTEe altre necessarie per gli oggetti specifici a cui devono accedere.
Specifica il contesto di esecuzione di GitHub Copilot con CONSTITUTION.md
Il database CONSTITUTION.md consente ai proprietari del database di specificare un utente del database o un account di accesso SQL applicabile a tutte le interazioni GitHub Copilot per tale database per la modalità Ask e Agent. Viene archiviata come proprietà estesa a livello di database. Ha la precedenza più alta di qualsiasi istruzione per il database: esegue l'override di tutte le AGENTS.md istruzioni a livello di oggetto. Quando è configurato, SSMS usa EXECUTE AS per eseguire le query generate da Copilot usando l'account specificato.
L'utente di SSMS connesso deve disporre dell'autorizzazione IMPERSONATE per l'utente Copilot designato. Senza questa autorizzazione, Copilot non è possibile eseguire query e la funzionalità non funziona per l'utente. Questo comportamento è per impostazione predefinita: anziché eseguire automaticamente il fallback alle autorizzazioni dell'utente (che potrebbero essere eccessivamente ampie), il sistema applica il principio dei privilegi minimi. Gli amministratori devono assegnare IMPERSONATE per l'account di esecuzione di Copilot a tutti gli utenti che devono accedere a Copilot. Possono anche usare l'assenza di tale concessione per bloccare l'utilizzo Copilot per utenti o ruoli specifici.
Per specificare un utente del database o un account SQL che GitHub Copilot deve usare durante l'esecuzione di query, aggiungi la proprietà agentExecuteAsUser al front matter YAML del CONSTITUTION.md per il database. Il agentExecuteAsUser deve essere aggiunto alla materia anteriore del CONSTITUTION.md affinché venga riconosciuto da GitHub Copilot.
proprietà del front matter agentExecuteAsUser
---
agentExecuteAsUser: <database user or SQL login>
---
La proprietà agentExecuteAsUser accetta un nome utente del database o un nome di accesso SQL Server. Quando si imposta questa proprietà, GitHub Copilot usa l'identità specificata durante l'esecuzione di query su tale database.
- L'ambito è a livello di singolo database. Ogni database può avere un proprio
CONSTITUTION.mdcon un valore diagentExecuteAsUserdiverso. - Le singole
AGENTS.mdistruzioni a livello di oggetto non possono sovrascrivereagentExecuteAsUser. Il contesto di esecuzione della costituzione ha la precedenza per l'intero database.
Aggiungere agentExecuteAsUser a CONSTITUTION.md
Archiviare l'istruzione CONSTITUTION.md come proprietà estesa nel database usando sp_addextendedproperty. Il @name deve essere CONSTITUTION.md e il @value contiene il contenuto completo della costituzione, inclusa l'intestazione YAML.
L'esempio seguente imposta agentExecuteAsUser su un utente con privilegi limitati (ReportingUser) e aggiunge uno standard di codifica:
USE SalesDB;
EXECUTE sp_addextendedproperty
@name = N'CONSTITUTION.md',
@value = N'---
agentExecuteAsUser: ReportingUser
---
Any T-SQL generated for this database must comply with organizational standards.
Queries must not use SELECT *. Always use explicit column lists.
Avoid queries that modify data unless explicitly requested by the user.';
GitHub Copilot legge la costituzione per un database quando un utente apre una sessione di GitHub Copilot per tale database. In questo esempio, GitHub Copilot usa ReportingUser come contesto di esecuzione per le query su tale database.
Pagine preliminari con il corpo della costituzione
L'intestazione YAML e il corpo Markdown coesistono all'interno dello stesso valore CONSTITUTION.md. Il contenuto iniziale è delimitato dai marcatori --- all'inizio del contenuto. Tutto ciò che segue il --- di chiusura viene considerato come corpo dell'istruzione e viene applicato come linee guida per tutte le interazioni Copilot.
USE SalesDB;
EXECUTE sp_addextendedproperty
@name = N'CONSTITUTION.md',
@value = N'---
agentExecuteAsUser: GHCP_DB_User
---
## Database Constitution: SalesDB
This database stores customer orders, product catalog, and revenue data.
### Coding standards
- Always use explicit column lists. Do not use SELECT *.
- Use schema-qualified object names (e.g., Sales.Orders, not Orders).
- Wrap multi-statement scripts in a transaction with TRY/CATCH error handling.
### Restricted operations
- Do not generate TRUNCATE TABLE statements.
- Do not generate DROP statements without an existence check.
- Revenue calculations must use SUM(NetAmount) from Sales.Transactions, excluding rows where RefundFlag = 1.';
Utente del database rispetto all'accesso SQL
La proprietà agentExecuteAsUser accetta un utente del database o un account di accesso SQL Server. Usare le indicazioni seguenti per scegliere le opzioni più appropriate per l'ambiente:
| Utente del database | Account di accesso SQL | |
|---|---|---|
| Scope | Specifico per un database | Identità a livello di server |
| Quando utilizzare | Quando si desidera impostare le autorizzazioni a livello di database | Quando si desidera impostare le autorizzazioni per un'identità a livello di server |
| Raccomandazione | Offre un controllo più granulare | Usare quando è necessaria un'identità a livello di server |
Per la maggior parte delle distribuzioni, specificando un utente del database, viene fornito il controllo più granulare. Creare un utente di database con privilegi limitati dedicati per GitHub Copilot e concedergli solo le autorizzazioni necessarie per le interazioni Copilot previste in tale database.
Esempio: creare un utente di database dedicato con autorizzazioni limitate
/* Create a database user that is not mapped to a SQL login */
USE SalesDB;
CREATE USER GHCP_DB_User WITHOUT LOGIN;
/* Grant only the permissions Copilot needs */
GRANT SELECT ON SCHEMA::Sales TO GHCP_DB_User;
GRANT SELECT ON SCHEMA::Reporting TO GHCP_DB_User;
GRANT EXECUTE ON SCHEMA::Sales TO GHCP_DB_User;
/* Do not grant DDL permissions unless schema modification is expected */
Quindi impostare agentExecuteAsUser: GHCP_DB_User in CONSTITUTION.md per il database SalesDB.
Procedure consigliate
Usare un account dedicato con privilegi limitati: creare un utente o un account di accesso di database specifico per GitHub Copilot anziché riutilizzare un utente esistente. Questo approccio riduce al minimo il rischio di assegnare in modo errato le autorizzazioni agli utenti GitHub Copilot se l'utente o l'account di accesso viene usato per un altro scopo.
Concedi solo ciò che è necessario: esamina i casi d’uso tipici di Copilot per il tuo database e concedi solo le autorizzazioni necessarie. Iniziare con l'accesso in sola lettura (
SELECT) e aggiungere deliberatamente le autorizzazioni di modifica.Evitare gli account con privilegi elevati: non impostare
agentExecuteAsUsersusa,dboo su qualsiasi account con privilegi elevati, a meno che il caso d'uso non lo richieda esplicitamente.Controlla regolarmente: rivedi periodicamente le autorizzazioni dell'account
agentExecuteAsUserman mano che cambiano i requisiti del database e del team.Ricorda il confine di esecuzione: l'impostazione di
agentExecuteAsUserdetermina quale identità usa Copilot, ma l'applicazione delle autorizzazioni di SQL Server è il vero confine di sicurezza. Verificare che l'account specificato disponga solo delle autorizzazioni minime necessarie.
Aggiornare o rimuovere agentExecuteAsUser
Per modificare il agentExecuteAsUser valore o aggiornare altre parti della costituzione, usare sp_updateextendedproperty:
USE SalesDB;
EXECUTE sp_updateextendedproperty
@name = N'CONSTITUTION.md',
@value = N'---
agentExecuteAsUser: New_GHCP_User
---
Updated constitution content here.';
Per rimuovere completamente l'istruzione CONSTITUTION.md , usare sp_dropextendedproperty:
USE SalesDB;
EXECUTE sp_dropextendedproperty @name = N'CONSTITUTION.md';
Dopo la rimozione, GitHub Copilot esegue query con l'account di accesso dell'utente connesso e non viene applicata alcuna costituzione a livello di database.
Verificare la costituzione corrente
Per verificare se per un database è impostata un'istruzione CONSTITUTION.md, chiedi a Copilot:
Does this database have a constitution set?
Oppure interrogare direttamente le proprietà estese:
USE SalesDB;
SELECT name,
CAST (value AS NVARCHAR (MAX)) AS ConstitutionContent
FROM sys.extended_properties
WHERE class = 0
AND name = N'CONSTITUTION.md';
Contenuti correlati
- Usare le istruzioni del database con GitHub Copilot in SQL Server Management Studio
- Usare la modalità agente GitHub Copilot (anteprima) in SQL Server Management Studio
- Introduzione a GitHub Copilot in SQL Server Management Studio
- Risoluzione dei problemi di GitHub Copilot in SQL Server Management Studio