A GitHub Copilot végrehajtási környezete az SQL Server Management Studióban

GitHub Copilot SQL Server Management Studio (SSMS) lekérdezéseket és parancsokat hajt végre a bejelentkezés kontextusában. Ez a cikk bemutatja az alapértelmezett végrehajtási modellt, valamint azt, hogy egy adatbázis CONSTITUTION.md használatával hogyan adhat meg egy adott adatbázis-felhasználót vagy SQL-bejelentkezést az adatbázis végrehajtási környezetének beállításához.

Alapértelmezett végrehajtási környezet

Az SSMS-ben a GitHub Copilot által létrehozott és végrehajtott összes lekérdezés — mind Ask módban, mind Agent módban — annak a felhasználónak vagy bejelentkezésnek a nevében fut, amellyel az adatbázishoz csatlakozott.

Note

A GitHub Copilot ügynök módja a SQL Server Management Studio (SSMS) alkalmazásban jelenleg előzetes verzióban van.

Copilot nem rendelkezik külön engedélyekkel és emelt szintű hozzáféréssel. Ha a felhasználód vagy a bejelentkezési fiókod nem tud olvasni egy táblát, a Copilot sem tudja.

Important

Ügynök módban a jóváhagyási rendszer nem biztonsági határ. Minden művelet előtt megerősíti a szándékát, de nem korlátozza, hogy mit tehet Copilot a bejelentkezéshez már megadott engedélyeken túl. A tényleges biztonsági határvonal az SQL Server engedélyeinek kikényszerítése. Alkalmazza a minimális jogosultság elvét: csak a szükséges engedélyeket SELECTadja meg a EXECUTEfelhasználóknak azokhoz az objektumokhoz, amelyekhez hozzá kell férniük.

A GitHub Copilot végrehajtási környezetének megadása a CONSTITUTION.md használatával

Az adatbázis-CONSTITUTION.md lehetővé teszi, hogy az adatbázis-tulajdonosok olyan adatbázis-felhasználót vagy SQL-bejelentkezést adjanak meg, amely az adatbázis összes GitHub Copilot interakciójához érvényes mind a Kérés, mind az Ügynök mód esetében. Az adatbázis szintjén kiterjesztett tulajdonságként van tárolva. Az adatbázishoz tartozó utasítások közül a legmagasabb az elsőbbsége: felülbírálja az összes AGENTS.md objektumszintű utasítást. Ha konfigurálva van, az SSMS a EXECUTE AS használatával futtat Copilot által létrehozott lekérdezéseket a megadott fiók alatt.

A bejelentkezett SSMS-felhasználónak IMPERSONATE engedéllyel kell rendelkeznie a kijelölt Copilot felhasználóhoz. Ezen engedély nélkül Copilot nem hajthat végre lekérdezéseket, és a funkció nem működik az adott felhasználó számára. Ez a viselkedés a tervezésen alapul: a rendszer ahelyett, hogy csendben visszaesne a felhasználó saját engedélyeihez (ami túl széles lehet), a rendszer a minimális jogosultság elvét kényszeríti ki. A rendszergazdáknak IMPERSONATE kell adniuk a Copilot végrehajtási fiókon minden olyan felhasználónak, akinek Copilot hozzáférésre van szüksége. A támogatás hiányát arra is használhatják, hogy blokkolják az adott felhasználók vagy szerepkörök Copilot használatát.

Ha meg szeretne adni egy adatbázis-felhasználót vagy SQL-bejelentkezést a lekérdezések végrehajtásakor használni kívánt GitHub Copilot számára, adja hozzá a agentExecuteAsUser tulajdonságot az adatbázis CONSTITUTION.md YAML-előlapjára. A agentExecuteAsUser hozzá kell adni a CONSTITUTION.md előlapjára ahhoz, hogy a GitHub Copilot felismerje.

agentExecuteAsUser előtag tulajdonság

---
agentExecuteAsUser: <database user or SQL login>
---

A agentExecuteAsUser tulajdonság egy adatbázis-felhasználónevet vagy egy SQL Server bejelentkezési nevet fogad el. A tulajdonság beállításakor GitHub Copilot a megadott identitást használja a lekérdezések adatbázison való végrehajtásakor.

  • A hatókör adatbázisonkénti. Minden adatbázis saját, más CONSTITUTION.md értékkel rendelkezhetagentExecuteAsUser.
  • Az egyes AGENTS.md objektumszintű utasítások nem írhatják felül agentExecuteAsUser. Az alkotmány végrehajtási környezete elsőbbséget élvez a teljes adatbázis számára.

AgentExecuteAsUser hozzáadása a CONSTITUTION.md-hez

A(z) CONSTITUTION.md utasítást tárolja kiterjesztett tulajdonságként az adatbázisban a(z) sp_addextendedproperty használatával. A @name elemnek CONSTITUTION.md kell lennie, és a @value a teljes alkotmányszöveget tartalmazza, beleértve a YAML-fejlécmetaadatokat is.

Az alábbi példa a agentExecuteAsUser értékét egy alacsony jogosultságú jelentéskészítő felhasználóra (ReportingUser) állítja be, és hozzáad egy kódolási szabványt:

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 beolvassa az adatbázis alkotmányát, amikor egy felhasználó megnyit egy GitHub Copilot munkamenetet az adatbázishoz. Ebben a példában GitHub Copilot a ReportingUser-t használja végrehajtási környezetként az adatbázissal kapcsolatos lekérdezésekhez.

Előrész és törzsszöveg

A YAML-előrész és a Markdown-törzs ugyanabban a CONSTITUTION.md értékben található meg. Az előtérbeli anyagot a tartalom elején lévő jelölők tagolják --- . A záró --- után minden utasítástörzsként lesz kezelve, és útmutatásként szolgál az összes Copilot interakcióhoz.

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.';

Adatbázis-felhasználó és SQL-bejelentkezés

A agentExecuteAsUser tulajdonság adatbázis-felhasználót vagy SQL Server bejelentkezést fogad el. Az alábbi útmutató segítségével kiválaszthatja a környezetének leginkább megfelelőt:

Adatbázis-felhasználó SQL-bejelentkezés
Scope Egy adatbázisra jellemző Kiszolgálószintű identitás
Mikor érdemes használni? Ha az engedélyeket az adatbázis szintjén szeretné beállítani Ha kiszolgálószintű identitáshoz szeretne engedélyeket beállítani
Ajánlás Részletesebb vezérlést kínál Akkor használható, ha kiszolgálószintű identitásra van szükség

A legtöbb üzemelő példány esetében az adatbázis-felhasználó megadása biztosítja a legrészletesebb vezérlést. Hozzon létre egy dedikált alacsony jogosultságú adatbázis-felhasználót a GitHub Copilot számára, és csak a várt Copilot interakciókhoz szükséges engedélyeket adja meg az adatbázishoz.

Példa: dedikált adatbázis-felhasználó létrehozása korlátozott engedélyekkel

/* 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 */

Ezután állítsa be a(z) SalesDB adatbázishoz tartozó CONSTITUTION.md elemben: agentExecuteAsUser: GHCP_DB_User.

Ajánlott eljárások

  • Dedikált, alacsony jogosultságú fiók: Meglévő felhasználó újbóli használatának helyett hozzon létre egy adott adatbázis-felhasználót vagy jelentkezzen be GitHub Copilot. Ez a módszer minimalizálja annak kockázatát, hogy helytelenül rendeljen engedélyeket GitHub Copilot felhasználókhoz, ha a felhasználót vagy a bejelentkezést más célra használják.

  • Grant only what is needed: Tekintse át az adatbázis tipikus Copilot használati eseteit, és csak a szükséges engedélyeket adja meg. Kezdje írásvédett (SELECT) hozzáféréssel, és csak megfontoltan adjon módosítási jogosultságokat.

  • Kerülje a kiemelt jogosultságú fiókokat: Ne állítsa a(z) agentExecuteAsUser értékét sa, dbo vagy bármely magas jogosultságokkal rendelkező fiókra, kivéve, ha a használati forgatókönyv ezt kifejezetten megköveteli.

  • Rendszeres naplózás: Az adatbázis és a csapat követelményeinek változásakor rendszeresen tekintse át a agentExecuteAsUser fiók engedélyeit.

  • Tartsa szem előtt a végrehajtási határt: A agentExecuteAsUser beállítás szabályozza, hogy a Copilot milyen identitást használ, de a valódi biztonsági határt az SQL Server engedélykezelése jelenti. Győződjön meg arról, hogy a megadott fiók csak a minimálisan szükséges engedélyekkel rendelkezik.

Az agentExecuteAsUser frissítése vagy eltávolítása

Az érték módosításához vagy az agentExecuteAsUser alkotmány más részeinek frissítéséhez használja a következőt sp_updateextendedproperty:

USE SalesDB;

EXECUTE sp_updateextendedproperty
    @name = N'CONSTITUTION.md',
    @value = N'---
agentExecuteAsUser: New_GHCP_User

---
Updated constitution content here.';

A CONSTITUTION.md utasítás teljes eltávolításához használja a következőt: sp_dropextendedproperty

USE SalesDB;

EXECUTE sp_dropextendedproperty @name = N'CONSTITUTION.md';

Az eltávolítás után a GitHub Copilot a csatlakoztatott felhasználó bejelentkezési adataival futtatja a lekérdezéseket, és nem érvényesül adatbázisszintű szabályzat.

A jelenlegi alkotmány ellenőrzése

Ha ellenőrizni szeretné, hogy egy CONSTITUTION.md utasítás be van-e állítva egy adatbázishoz, kérdezze meg a Copilot:

Does this database have a constitution set?

Vagy közvetlenül lekérdezheti a kiterjesztett tulajdonságokat:

USE SalesDB;

SELECT name,
       CAST (value AS NVARCHAR (MAX)) AS ConstitutionContent
FROM sys.extended_properties
WHERE class = 0
      AND name = N'CONSTITUTION.md';