Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
GitHub Copilot in SQL Server Management Studio (SSMS) voert query's en opdrachten uit onder de context van uw aanmelding. In dit artikel wordt het standaarduitvoeringsmodel uitgelegd en wordt uitgelegd hoe u een database CONSTITUTION.md gebruikt om een bepaalde databasegebruiker of SQL-aanmelding op te geven om de uitvoeringscontext voor de database in te stellen.
Standaard uitvoeringscontext
Alle query's die GitHub Copilot in SSMS genereren en uitvoeren, in zowel de modus Vragen als de agentmodus, worden uitgevoerd onder de gebruiker of aanmelding die u hebt gebruikt om verbinding te maken met de database.
Opmerking
GitHub Copilot Agent-modus in SQL Server Management Studio (SSMS) is momenteel in preview.
Copilot heeft geen afzonderlijke machtigingen en geen verhoogde toegang. Als uw gebruiker of aanmelding een tabel niet kan lezen, kan Copilot deze ook niet lezen.
Important
Het goedkeuringssysteem in de agentmodus is geen beveiligingsgrens. Het bevestigt uw intentie vóór elke actie, maar beperkt niet wat Copilot kan doen buiten de machtigingen die al aan uw aanmelding zijn verleend. De werkelijke beveiligingsgrens is de handhaving van SQL Server-machtigingen. Pas het principe van minimale bevoegdheden toe: ververleent gebruikers alleen de SELECT, EXECUTEen andere machtigingen die ze nodig hebben voor de specifieke objecten die ze moeten openen.
Geef GitHub Copilot uitvoeringscontext op met CONSTITUTION.md
De database CONSTITUTION.md laat database-eigenaren een databasegebruiker of SQL-login opgeven die voor alle GitHub Copilot-interacties voor die database van toepassing is, voor zowel de modus Ask als de modus Agent. Het wordt opgeslagen als een uitgebreide eigenschap op databaseniveau. Het heeft de hoogste prioriteit van alle instructies voor die database: het overschrijft alle AGENTS.md instructies op objectniveau. Indien geconfigureerd, gebruikt SSMS EXECUTE AS om Copilot gegenereerde query's uit te voeren onder dat opgegeven account.
De aangemelde SSMS-gebruiker moet IMPERSONATE machtiging hebben voor de aangewezen Copilot gebruiker. Zonder deze machtiging kan Copilot geen query's uitvoeren en werkt de functie niet voor die gebruiker. Dit gedrag is standaard: in plaats van op de achtergrond terug te vallen op de eigen machtigingen van de gebruiker (die mogelijk te breed zijn), dwingt het systeem het principe van minimale bevoegdheden af. Beheerders moeten alle gebruikers die toegang tot Copilot nodig hebben, IMPERSONATE op het uitvoeringsaccount van Copilot verlenen. Ze kunnen ook gebruikmaken van de afwezigheid van die toekenning om Copilot gebruik voor specifieke gebruikers of rollen te blokkeren.
Als u een databasegebruiker of SQL-aanmelding voor GitHub Copilot wilt opgeven die moet worden gebruikt bij het uitvoeren van query's, voegt u de eigenschap agentExecuteAsUser toe aan de YAML-front-matter van de CONSTITUTION.md voor de database. De agentExecuteAsUser moet worden toegevoegd aan de front-matter van de CONSTITUTION.md om te worden herkend door GitHub Copilot.
front-mattereigenschap agentExecuteAsUser
---
agentExecuteAsUser: <database user or SQL login>
---
De eigenschap agentExecuteAsUser accepteert een gebruikersnaam voor de database of een SQL Server aanmeldingsnaam. Wanneer u deze eigenschap instelt, gebruikt GitHub Copilot de opgegeven identiteit bij het uitvoeren van query's op die database.
- Het bereik is per database. Elke database kan een eigen
CONSTITUTION.mdwaarde hebben met een andereagentExecuteAsUserwaarde. - Afzonderlijke
AGENTS.mdinstructies op objectniveau kunnenagentExecuteAsUserniet overschrijven. De uitvoeringscontext van de grondwet heeft voorrang voor de volledige database.
AgentExecuteAsUser toevoegen aan CONSTITUTION.md
Sla de CONSTITUTION.md instructie op als een uitgebreide eigenschap op de database met behulp van sp_addextendedproperty. Het @name moet CONSTITUTION.md zijn en de @value bevat de volledige constitution-inhoud, inclusief de YAML-front matter.
In het volgende voorbeeld wordt agentExecuteAsUser ingesteld op een rapportagegebruiker met beperkte rechten (ReportingUser) en wordt een coderingsstandaard toegevoegd:
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 de grondwet voor een database leest wanneer een gebruiker een GitHub Copilot sessie voor die database opent. In dit voorbeeld gebruikt GitHub Copilot ReportingUser als uitvoeringscontext voor query's voor die database.
Voorwerk met hoofdtekst van de grondwet
De YAML-front-matter en de Markdown-hoofdtekst bestaan naast elkaar in dezelfde CONSTITUTION.md waarde. De front-matter wordt gescheiden door --- markeringen aan het begin van de inhoud. Alles na de afsluitende --- wordt beschouwd als de hoofdtekst van de instructie en geldt als leidraad voor alle Copilot-interacties.
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.';
Databasegebruiker versus SQL-aanmelding
De eigenschap agentExecuteAsUser accepteert een databasegebruiker of een SQL Server aanmelding. Gebruik de volgende richtlijnen om te kiezen wat het meest geschikt is voor uw omgeving:
| Databasegebruiker | SQL-aanmelding | |
|---|---|---|
| Scope | Specifiek voor één database | Identiteit voor de hele server |
| Wanneer gebruiken | Wanneer u machtigingen wilt instellen op databaseniveau | Wanneer u machtigingen wilt instellen voor een identiteit op serverniveau |
| Aanbeveling | Biedt meer gedetailleerde controle | Gebruiken wanneer een identiteit op serverniveau is vereist |
Voor de meeste implementaties biedt het opgeven van een databasegebruiker de meest gedetailleerde controle. Maak een toegewezen databasegebruiker met beperkte bevoegdheden voor GitHub Copilot en geef deze alleen de machtigingen die nodig zijn voor de verwachte Copilot interacties in die database.
Voorbeeld: een toegewezen databasegebruiker maken met beperkte machtigingen
/* 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 */
Stel vervolgens agentExecuteAsUser: GHCP_DB_User in de CONSTITUTION.md in voor de database SalesDB.
Beste praktijken
Gebruik een toegewezen account met beperkte bevoegdheden: maak een specifieke databasegebruiker of aanmelding voor GitHub Copilot in plaats van een bestaande gebruiker opnieuw te gebruiken. Deze aanpak minimaliseert het risico dat machtigingen onjuist worden toegewezen aan GitHub Copilot gebruikers als de gebruiker of aanmelding voor een ander doel wordt gebruikt.
Grant alleen wat nodig is: bekijk de typische Copilot use cases voor uw database en verleent alleen de vereiste machtigingen. Begin met alleen-lezentoegang (
SELECT) en voeg bewust wijzigingsmachtigingen toe.Vermijd accounts met uitgebreide machtigingen: stel
agentExecuteAsUserniet in opsa,dboof een account met uitgebreide machtigingen, tenzij het toepassingsscenario dit expliciet vereist.Regelmatig controleren: controleer de machtigingen van het
agentExecuteAsUseraccount regelmatig wanneer uw database- en teamvereisten veranderen.Houd rekening met de uitvoeringsgrens: Door
agentExecuteAsUserin te stellen, bepaal je welke identiteit Copilot gebruikt, maar de afdwinging van machtigingen door SQL Server is de daadwerkelijke beveiligingsgrens. Zorg ervoor dat het opgegeven account alleen de minimale machtigingen heeft die nodig zijn.
AgentExecuteAsUser bijwerken of verwijderen
Als u de agentExecuteAsUser waarde wilt wijzigen of andere onderdelen van de grondwet wilt bijwerken, gebruikt u sp_updateextendedproperty:
USE SalesDB;
EXECUTE sp_updateextendedproperty
@name = N'CONSTITUTION.md',
@value = N'---
agentExecuteAsUser: New_GHCP_User
---
Updated constitution content here.';
Als u de CONSTITUTION.md instructie volledig wilt verwijderen, gebruikt u sp_dropextendedproperty:
USE SalesDB;
EXECUTE sp_dropextendedproperty @name = N'CONSTITUTION.md';
Na verwijdering voert GitHub Copilot query's uit onder de aanmelding van de verbonden gebruiker en is er geen grondwet op databaseniveau van toepassing.
De huidige grondwet controleren
Als u wilt controleren of een CONSTITUTION.md instructie is ingesteld voor een database, vraagt u Copilot:
Does this database have a constitution set?
Of voer rechtstreeks een query uit op de uitgebreide eigenschappen:
USE SalesDB;
SELECT name,
CAST (value AS NVARCHAR (MAX)) AS ConstitutionContent
FROM sys.extended_properties
WHERE class = 0
AND name = N'CONSTITUTION.md';