Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
GitHub Copilot v SQL Server Management Studio (SSMS) spouští dotazy a příkazy v kontextu vašeho přihlášení. Tento článek vysvětluje výchozí model spouštění a způsob použití databáze CONSTITUTION.md k určení konkrétního uživatele databáze nebo přihlášení SQL k nastavení kontextu spuštění pro databázi.
Výchozí kontext spuštění
Všechny dotazy, které GitHub Copilot v nástroji SSMS generují a spouštějí, v režimu Ask i v režimu agenta, běží pod uživatelem nebo přihlášením, které jste použili pro připojení k databázi.
Poznámka:
Režim agenta GitHub Copilot v SQL Server Management Studio (SSMS) je momentálně ve verzi Preview.
Copilot nemá žádná samostatná oprávnění ani zvýšený přístup. Pokud uživatel nebo přihlášení nemůže přečíst tabulku, Copilot ji ani nemůže přečíst.
Important
Schvalovací systém v režimu agenta není hranicí zabezpečení. Potvrdí váš záměr před každou akcí, ale neomezuje to, co Copilot může dělat nad rámec oprávnění, která už byla udělena vašemu přihlášení. Skutečnou hranicí zabezpečení je vynucování oprávnění v SQL Serveru. Použijte zásadu nejnižších oprávnění: udělte uživatelům pouze SELECToprávnění , EXECUTEa další oprávnění, která potřebují pro konkrétní objekty, ke kterým by měli přistupovat.
Určení kontextu spouštění GitHub Copilot pomocí CONSTITUTION.md
Databáze CONSTITUTION.md umožňuje vlastníkům databáze zadat uživatele databáze nebo přihlášení SQL, které platí pro všechny GitHub Copilot interakce pro danou databázi v režimu Ask i Agent. Uloží se jako rozšířená vlastnost na úrovni databáze. Má nejvyšší prioritu všech instrukcí pro danou databázi: přepíše všechny AGENTS.md instrukce na úrovni objektu. Při konfiguraci používá SSMS EXECUTE AS ke spouštění dotazů generovaných Copilot v rámci daného účtu.
Přihlášený uživatel SSMS musí mít pro určeného uživatele Copilot oprávnění IMPERSONATE. Bez tohoto oprávnění Copilot nemůžou spouštět dotazy a funkce pro tohoto uživatele nefunguje. Toto chování je záměrně: místo tichého návratu k vlastním oprávněním uživatele (což může být příliš široké), systém vynucuje princip nejnižších oprávnění. Správci by měli udělit IMPERSONATE k účtu pro spouštění Copilotu všem uživatelům, kteří potřebují přístup ke Copilotu. Mohou také využít neexistenci tohoto oprávnění k zablokování používání Copilotu pro konkrétní uživatele nebo role.
Pokud chcete určit uživatele databáze nebo přihlašovací údaje SQL, které má GitHub Copilot použít při spouštění dotazů, přidejte vlastnost agentExecuteAsUser do záhlaví YAML v CONSTITUTION.md pro databázi.
agentExecuteAsUser musí být přidán do přední části CONSTITUTION.md, aby ho GitHub Copilot rozpoznal.
agentExecuteAsUser – vlastnost úvodní části
---
agentExecuteAsUser: <database user or SQL login>
---
Vlastnost agentExecuteAsUser přijímá uživatelské jméno databáze nebo přihlašovací jméno SQL Server. Při nastavování této vlastnosti GitHub Copilot používá zadanou identitu při provádění dotazů na danou databázi.
- Rozsah je pro každou databázi. Každá databáze může mít vlastní
CONSTITUTION.mds jinouagentExecuteAsUserhodnotou. - Jednotlivé
AGENTS.mdinstrukce na úrovni objektu nemohou přepsatagentExecuteAsUser. Kontext provádění ústavy má přednost pro celou databázi.
Přidejte agentExecuteAsUser do CONSTITUTION.md
Uložte instrukci CONSTITUTION.md jako rozšířenou vlastnost databáze pomocí sp_addextendedproperty.
@name musí být CONSTITUTION.md a @value obsahuje úplný obsah ústavy, včetně úvodních metadat YAML.
Následující příklad nastaví agentExecuteAsUser uživatele pro generování sestav s nízkým oprávněním (ReportingUser) a přidá kódovací standard:
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 načte konstituci databáze, když uživatel otevře relaci GitHub Copilot pro tuto databázi. V tomto příkladu GitHub Copilot používá ReportingUser jako kontext spuštění pro dotazy na danou databázi.
Přední část s hlavní částí
Hlavní hmota YAML a tělo Markdownu spolu existují ve stejné CONSTITUTION.md hodnotě. Úvodní část je na začátku obsahu vymezena značkami ---. Vše za uzavírací značkou --- se považuje za obsah instrukce a slouží jako pokyny pro všechny interakce s Copilotem.
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.';
Uživatel databáze versus přihlášení k SQL
Vlastnost agentExecuteAsUser přijímá uživatele databáze nebo SQL Server přihlášení. Při výběru nejvhodnějších možností pro vaše prostředí použijte následující doprovodné materiály:
| Uživatel databáze | Přihlášení SQL | |
|---|---|---|
| Scope | Specifické pro jednu databázi | Identita na úrovni serveru |
| Kdy ho použít | Pokud chcete nastavit oprávnění na úrovni databáze | Pokud chcete nastavit oprávnění pro identitu na úrovni serveru |
| Recommendation | Nabízí podrobnější řízení. | Použití v případě, že se vyžaduje identita na úrovni serveru |
Pro většinu nasazení poskytuje zadání uživatele databáze nejpodrobnější kontrolu. Vytvořte vyhrazeného uživatele databáze s nízkými oprávněními pro GitHub Copilot a udělte mu pouze oprávnění potřebná pro očekávané Copilot interakce v této databázi.
Příklad: Vytvoření vyhrazeného uživatele databáze s omezenými oprávněními
/* 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 */
Pak nastavte agentExecuteAsUser: GHCP_DB_User v CONSTITUTION.md pro databázi SalesDB.
Osvědčené postupy
Použít vyhrazený účet s nízkými oprávněními: Vytvořte konkrétního uživatele databáze nebo se přihlaste pro GitHub Copilot místo opakovaného použití existujícího uživatele. Tento přístup minimalizuje riziko nesprávného přiřazování oprávnění GitHub Copilot uživatelům, pokud se uživatel nebo přihlášení používá k jinému účelu.
Grant pouze to, co je potřeba: Zkontrolujte typické případy použití Copilot databáze a udělte jenom požadovaná oprávnění. Začněte s přístupem jen pro čtení (
SELECT) a přidejte oprávnění pro úpravy záměrně.Vyhněte se vysoce privilegovaným účtům: Nenastavujte
agentExecuteAsUsersanebodbožádný účet s vysokými oprávněními, pokud to případ použití explicitně nevyžaduje.Pravidelně auditujte: Pravidelně kontrolujte oprávnění
agentExecuteAsUserúčtu při změně požadavků na databázi a tým.Mějte na paměti hranici spuštění: Nastavení
agentExecuteAsUserurčuje, pod jakou identitou Copilot běží, ale vynucování oprávnění v SQL Serveru je skutečnou hranicí zabezpečení. Ujistěte se, že zadaný účet má potřebná pouze minimální oprávnění.
Aktualizace nebo odebrání agentaExecuteAsUser
Chcete-li změnit agentExecuteAsUser hodnotu nebo aktualizovat jiné části ústavy, použijte sp_updateextendedproperty:
USE SalesDB;
EXECUTE sp_updateextendedproperty
@name = N'CONSTITUTION.md',
@value = N'---
agentExecuteAsUser: New_GHCP_User
---
Updated constitution content here.';
Chcete-li zcela odebrat CONSTITUTION.md instrukce, použijte sp_dropextendedproperty:
USE SalesDB;
EXECUTE sp_dropextendedproperty @name = N'CONSTITUTION.md';
Po odstranění GitHub Copilot spouští dotazy pod přihlášením připojeného uživatele a nepoužije se žádné omezení na úrovni databáze.
Ověření aktuální ústavy
Pokud chcete zkontrolovat, jestli je pro databázi nastavená instrukce CONSTITUTION.md, zeptejte se Copilot:
Does this database have a constitution set?
Nebo dotazujte rozšířené vlastnosti přímo:
USE SalesDB;
SELECT name,
CAST (value AS NVARCHAR (MAX)) AS ConstitutionContent
FROM sys.extended_properties
WHERE class = 0
AND name = N'CONSTITUTION.md';