Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
GitHub Copilot i SQL Server Management Studio (SSMS) kör frågor och kommandon i kontexten för din inloggning. Den här artikeln beskriver standardkörningsmodellen och hur du använder en databas för att ange en viss databasanvändare eller SQL-inloggning för att ange körningskontext CONSTITUTION.md för databasen.
Standardkörningskontext
Alla frågor som GitHub Copilot i SSMS genererar och kör, i både askläge och agentläge, körs under den användare eller inloggning som du använde för att ansluta till databasen.
Anmärkning
GitHub Copilot agentläget i SQL Server Management Studio (SSMS) är för närvarande i förhandsversion.
Copilot har inga separata behörigheter och ingen förhöjd åtkomst. Om användaren eller inloggningen inte kan läsa en tabell kan Copilot inte heller läsa den.
Important
Godkännandesystemet i agentläge är inte en säkerhetsgräns. Den bekräftar din avsikt före varje åtgärd, men den begränsar inte vad Copilot kan göra utöver de behörigheter som redan har beviljats för din inloggning. Den faktiska säkerhetsgränsen är SQL Servers upprätthållande av behörigheter. Tillämpa principen för lägsta behörighet: bevilja användare endast de SELECT, EXECUTEoch andra behörigheter som de behöver för de specifika objekt som de ska komma åt.
Ange GitHub Copilots exekveringskontext med CONSTITUTION.md
Databasen CONSTITUTION.md låter databasägare ange en databasanvändare eller SQL-inloggning som gäller för alla GitHub Copilot interaktioner för databasen för både Ask- och Agent-läge. Den lagras som en utökad egenskap på databasnivå. Den har den högsta prioriteten för alla instruktioner för databasen: den åsidosätter alla AGENTS.md instruktioner på objektnivå. När detta har konfigurerats använder SSMS EXECUTE AS för att köra Copilot-genererade frågor med det angivna kontot.
Den inloggade SSMS-användaren måste ha behörigheten IMPERSONATE för den avsedda Copilot användaren. Utan den här behörigheten kan Copilot inte köra frågor och funktionen fungerar inte för den användaren. Det här beteendet är avsiktligt: i stället för att tyst falla tillbaka till användarens egna behörigheter (som kan vara alltför breda) tillämpar systemet principen om minsta behörighet. Administratörer bör bevilja IMPERSONATE på Copilot-körningskontot till alla användare som behöver Copilot åtkomst. De kan också använda avsaknaden av det beviljandet för att blockera Copilot användning för specifika användare eller roller.
För att ange en databasanvändare eller SQL-inloggning som GitHub Copilot ska använda när frågor körs lägger du till egenskapen agentExecuteAsUser i YAML-inledningen i CONSTITUTION.md för databasen.
agentExecuteAsUser måste läggas till i den främre delen av CONSTITUTION.md för att den ska kunna identifieras av GitHub Copilot.
agentExecuteAsUser-egenskapen för inledande metadata
---
agentExecuteAsUser: <database user or SQL login>
---
Egenskapen agentExecuteAsUser accepterar antingen ett databasanvändarnamn eller ett SQL Server inloggningsnamn. När du anger den här egenskapen använder GitHub Copilot den angivna identiteten när du kör frågor mot databasen.
- Omfattningen är på databasnivå. Varje databas kan ha ett eget
CONSTITUTION.mdmed ett annatagentExecuteAsUser-värde. - Enskilda
AGENTS.mdinstruktioner på objektnivå kan inte åsidosättaagentExecuteAsUser. Konstitutionens körningskontext har företräde för hela databasen.
Lägg till agentExecuteAsUser i CONSTITUTION.md
Lagra instruktionen CONSTITUTION.md som en utökad egenskap i databasen med hjälp sp_addextendedpropertyav .
@name måste vara CONSTITUTION.md och @value innehåller hela innehållet i konstitutionen, inklusive YAML-inledningen.
I följande exempel anger du agentExecuteAsUser till en rapporteringsanvändare med begränsad behörighet (ReportingUser) och lägger till en kodningsstandard:
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 läser konstitutionen för en databas när en användare öppnar en GitHub Copilot session för databasen. I det här exemplet använder GitHub Copilot ReportingUser som körningskontext för frågor mot databasen.
Inledande text och huvuddel
YAML-fronten och Markdown-brödtexten samexisterar i samma CONSTITUTION.md värde. Den främre delen avgränsas av --- markörer i början av innehållet. Allt efter den avslutande --- behandlas som instruktionstext och används som vägledning för alla Copilot interaktioner.
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.';
Databasanvändare jämfört med SQL-inloggning
Egenskapen agentExecuteAsUser accepterar antingen en databasanvändare eller en SQL Server inloggning. Använd följande vägledning för att välja vad som passar bäst för din miljö:
| Databasanvändare | SQL-inloggning | |
|---|---|---|
| Scope | Specifikt för en databas | Serveromfattande identitet |
| När det bör användas | När du vill ange behörigheter på databasnivå | När du vill ange behörigheter för en identitet på servernivå |
| Recommendation | Ger mer detaljerad kontroll | Använd när en identitet på servernivå krävs |
För de flesta distributioner ger det mest detaljerade kontroll att ange en databasanvändare. Skapa en dedikerad databasanvändare med låg behörighet för GitHub Copilot och ge den endast de behörigheter som krävs för de förväntade Copilot interaktionerna i databasen.
Exempel: skapa en dedikerad databasanvändare med begränsad behörighet
/* 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 */
Ange sedan agentExecuteAsUser: GHCP_DB_User i CONSTITUTION.md för databasen SalesDB.
Bästa praxis
Använd ett dedikerat konto med låg behörighet: Skapa en specifik databasanvändare eller inloggning för GitHub Copilot i stället för att återanvända en befintlig användare. Den här metoden minimerar risken för att felaktigt tilldela behörigheter till GitHub Copilot användare om användaren eller inloggningen används för ett annat syfte.
Grant bara vad som behövs: Granska de vanliga Copilot användningsfallen för databasen och bevilja endast de behörigheter som krävs. Börja med skrivskyddad (
SELECT) åtkomst och lägg till ändringsbehörigheter avsiktligt.Undvik konton med hög behörighet: Ange inte
agentExecuteAsUsertillsa,dboeller något konto med hög behörighet om inte användningsfallet uttryckligen kräver det.Granska regelbundet: Granska behörigheterna för
agentExecuteAsUserkontot regelbundet när dina databas- och teamkrav ändras.Kom ihåg exekveringsgränsen: Inställningen
agentExecuteAsUserstyr vilken identitet Copilot använder, men SQL Servers behörighetskontroll är den faktiska säkerhetsgränsen. Kontrollera att det angivna kontot bara har de minsta behörigheter som krävs.
Uppdatera eller ta bort agentExecuteAsUser
Om du vill ändra agentExecuteAsUser värdet eller uppdatera andra delar av konstitutionen använder du sp_updateextendedproperty:
USE SalesDB;
EXECUTE sp_updateextendedproperty
@name = N'CONSTITUTION.md',
@value = N'---
agentExecuteAsUser: New_GHCP_User
---
Updated constitution content here.';
Om du vill ta bort instruktionen CONSTITUTION.md helt använder du sp_dropextendedproperty:
USE SalesDB;
EXECUTE sp_dropextendedproperty @name = N'CONSTITUTION.md';
Efter borttagningen kör GitHub Copilot frågor under den anslutna användarens inloggning och ingen konstitution på databasnivå gäller.
Verifiera den aktuella konstitutionen
Om du vill kontrollera om en CONSTITUTION.md-instruktion har angetts för en databas frågar du Copilot:
Does this database have a constitution set?
Eller fråga de utökade egenskaperna direkt:
USE SalesDB;
SELECT name,
CAST (value AS NVARCHAR (MAX)) AS ConstitutionContent
FROM sys.extended_properties
WHERE class = 0
AND name = N'CONSTITUTION.md';