Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
GitHub Copilot in SQL Server Management Studio (SSMS) führt Abfragen und Befehle im Kontext Ihrer Anmeldung aus. In diesem Artikel werden das Standardausführungsmodell erläutert und die Verwendung von CONSTITUTION.md, mit dem ein bestimmter Datenbankbenutzer oder eine SQL-Anmeldung angegeben wird, um den Ausführungskontext für die Datenbank festzulegen.
Standardausführungskontext
Alle Abfragen, die GitHub Copilot in SSMS sowohl im Fragemodus als auch im Agent-Modus generiert und ausführt, werden unter dem Benutzer oder der Anmeldung ausgeführt, den bzw. die Sie für die Verbindung mit der Datenbank verwendet haben.
Hinweis
Der GitHub Copilot Agentmodus ist derzeit in SQL Server Management Studio (SSMS) als Vorschau verfügbar.
Copilot verfügt über keine separaten Berechtigungen und keinen erweiterten Zugriff. Wenn Ihr Benutzer oder Ihre Anmeldung keine Tabelle lesen kann, kann Copilot sie auch nicht lesen.
Important
Das Genehmigungssystem im Agentmodus ist keine Sicherheitsgrenze. Es bestätigt vor jeder Aktion Ihre Absicht, schränkt jedoch nicht ein, was Copilot über die bereits für Ihre Anmeldung gewährten Berechtigungen hinaus tun kann. Die tatsächliche Sicherheitsgrenze ist die Durchsetzung von Berechtigungen durch SQL Server. Wenden Sie das Prinzip der geringsten Rechte an: Gewähren Sie Benutzern nur die SELECT, EXECUTEund andere Berechtigungen, die sie für die spezifischen Objekte benötigen, auf die sie zugreifen sollten.
Den Ausführungskontext von GitHub Copilot mit CONSTITUTION.md festlegen
Mit der Datenbank CONSTITUTION.md können Datenbankbesitzer einen Datenbankbenutzer oder eine SQL-Anmeldung angeben, die für alle GitHub Copilot Interaktionen für diese Datenbank sowohl für den Abfrage- als auch für den Agent-Modus gilt. Sie wird als erweiterte Eigenschaft auf Datenbankebene gespeichert. Sie hat die höchste Priorität jeder Anweisung für diese Datenbank: Sie überschreibt alle AGENTS.md Anweisungen auf Objektebene. Bei der Konfiguration verwendet SSMS EXECUTE AS, um Copilot generierte Abfragen unter diesem angegebenen Konto auszuführen.
Der angemeldete SSMS-Benutzer muss über IMPERSONATE Berechtigung für den angegebenen Copilot Benutzer verfügen. Ohne diese Berechtigung können Copilot keine Abfragen ausführen, und das Feature funktioniert für diesen Benutzer nicht. Dieses Verhalten ist beabsichtigt: Anstatt im Hintergrund auf die eigenen Berechtigungen des Benutzers zurückzufallen (was möglicherweise übermäßig breit sein kann), erzwingt das System das Prinzip der geringsten Berechtigungen. Administratoren sollten IMPERSONATE für das Copilot Ausführungskonto allen Benutzern gewähren, die Copilot Zugriff benötigen. Sie können auch das Fehlen dieser Gewährung verwenden, um Copilot Nutzung für bestimmte Benutzer oder Rollen zu blockieren.
Um einen Datenbankbenutzer oder eine SQL-Anmeldung für GitHub Copilot anzugeben, die beim Ausführen von Abfragen verwendet werden sollen, fügen Sie die eigenschaft agentExecuteAsUser zur YAML-Front-Materie der CONSTITUTION.md für die Datenbank hinzu. Die agentExecuteAsUser muss dem Vordergrund der CONSTITUTION.md hinzugefügt werden, damit sie von GitHub Copilot erkannt werden kann.
agentExecuteAsUser-Front-Matter-Eigenschaft
---
agentExecuteAsUser: <database user or SQL login>
---
Die eigenschaft agentExecuteAsUser akzeptiert entweder einen Datenbankbenutzernamen oder einen SQL Server Anmeldenamen. Wenn Sie diese Eigenschaft festlegen, verwendet GitHub Copilot beim Ausführen von Abfragen für diese Datenbank die angegebene Identität.
- Der Geltungsbereich ist je Datenbank. Jede Datenbank kann ihr eigenes
CONSTITUTION.mdmit einem anderenagentExecuteAsUser-Wert haben. - Anweisungen auf Ebene einzelner
AGENTS.mdObjekte könnenagentExecuteAsUsernicht außer Kraft setzen. Der Ausführungskontext der Verfassung hat Vorrang für die gesamte Datenbank.
Hinzufügen von agentExecuteAsUser zu CONSTITUTION.md
Speichern Sie die CONSTITUTION.md-Anweisung mithilfe von sp_addextendedproperty als erweiterte Eigenschaft in der Datenbank. Das @name muss CONSTITUTION.md sein, und das @value enthält den vollständigen Inhalt der Verfassung, einschließlich des YAML-Frontmatter.
Das folgende Beispiel setzt agentExecuteAsUser auf einen Reporting-Benutzer mit geringen Berechtigungen (ReportingUser) und fügt einen Codierungsstandard hinzu:
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 liest die Verfassung für eine Datenbank vor, wenn ein Benutzer eine GitHub Copilot Sitzung für diese Datenbank öffnet. In diesem Beispiel verwendet GitHub Copilot ReportingUser als Ausführungskontext für Abfragen für diese Datenbank.
Vorspann mit Hauptteil der Satzung
Das YAML-Frontmatter und der Markdown-Hauptteil befinden sich im selben CONSTITUTION.md-Wert. Der Vorspann ist zu Beginn des Inhalts durch ----Markierungen abgegrenzt. Alles nach dem schließenden --- wird als Anweisungstext behandelt und als Anleitung für alle Copilot Interaktionen angewendet.
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.';
Datenbankbenutzer im Vergleich zur SQL-Anmeldung
Die eigenschaft agentExecuteAsUser akzeptiert entweder einen Datenbankbenutzer oder eine SQL Server Anmeldung. Verwenden Sie die folgenden Anleitungen, um auszuwählen, was für Ihre Umgebung am besten geeignet ist:
| Datenbankbenutzer | SQL-Anmeldekonto | |
|---|---|---|
| Bereich | Spezifisch für eine Datenbank | Serverweite Identität |
| Wann verwenden | Wenn Sie Berechtigungen auf Datenbankebene festlegen möchten | Wenn Sie Berechtigungen für eine Identität auf Serverebene festlegen möchten |
| Empfehlung | Bietet eine präzisere Steuerung | Verwenden, wenn eine Identität auf Serverebene erforderlich ist |
Für die meisten Bereitstellungen bietet die Angabe eines Datenbankbenutzers die präziseste Kontrolle. Erstellen Sie einen dedizierten Datenbankbenutzer mit niedriger Berechtigung für GitHub Copilot, und erteilen Sie ihm nur die Berechtigungen, die für die erwarteten Copilot Interaktionen in dieser Datenbank erforderlich sind.
Beispiel: Erstellen eines dedizierten Datenbankbenutzers mit eingeschränkten Berechtigungen
/* 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 */
Legen Sie dann agentExecuteAsUser: GHCP_DB_User in der CONSTITUTION.md für die SalesDB-Datenbank fest.
Bewährte Methoden
Verwenden Sie ein dediziertes Konto mit geringen Berechtigungen: Erstellen Sie einen speziellen Datenbankbenutzer oder eine spezielle Anmeldung für GitHub Copilot, anstatt einen vorhandenen Benutzer wiederzuverwenden. Bei diesem Ansatz wird das Risiko minimiert, dass Benutzern berechtigungen falsch GitHub Copilot zugewiesen werden, wenn der Benutzer oder die Anmeldung für einen anderen Zweck verwendet wird.
Grant nur was erforderlich ist: Überprüfen Sie die typischen Copilot Anwendungsfälle für Ihre Datenbank, und erteilen Sie nur die erforderlichen Berechtigungen. Beginnen Sie mit schreibgeschütztem (
SELECT) Zugriff und fügen Sie gezielt Änderungsberechtigungen hinzu.Vermeiden Sie hoch privilegierte Konten: Legen Sie für
agentExecuteAsUsernichtsa,dbooder ein Konto mit hohen Berechtigungen fest, es sei denn, der Anwendungsfall erfordert dies ausdrücklich.Regelmäßig überwachen: Überprüfen Sie die Berechtigungen des
agentExecuteAsUserKontos regelmäßig, wenn sich Ihre Datenbank- und Teamanforderungen ändern.Beachten Sie die Ausführungsgrenze: Das Festlegen von
agentExecuteAsUsersteuert, welche Identität Copilot verwendet, aber die Berechtigungsdurchsetzung von SQL Server ist die eigentliche Sicherheitsgrenze. Stellen Sie sicher, dass das angegebene Konto nur über die erforderlichen Mindestberechtigungen verfügt.
Aktualisieren oder Entfernen von agentExecuteAsUser
Um den agentExecuteAsUser Wert zu ändern oder andere Teile der Verfassung zu aktualisieren, verwenden Sie sp_updateextendedpropertyFolgendes:
USE SalesDB;
EXECUTE sp_updateextendedproperty
@name = N'CONSTITUTION.md',
@value = N'---
agentExecuteAsUser: New_GHCP_User
---
Updated constitution content here.';
Um die CONSTITUTION.md Anweisung vollständig zu entfernen, verwenden Sie Folgendes sp_dropextendedproperty:
USE SalesDB;
EXECUTE sp_dropextendedproperty @name = N'CONSTITUTION.md';
Nach dem Entfernen führt GitHub Copilot Abfragen unter der Anmeldung des verbundenen Benutzers aus, und es gilt keine Verfassung auf Datenbankebene.
Überprüfen der aktuellen Verfassung
Um zu überprüfen, ob eine CONSTITUTION.md-Anweisung für eine Datenbank festgelegt ist, fragen Sie Copilot:
Does this database have a constitution set?
Oder fragen Sie die erweiterten Eigenschaften direkt ab:
USE SalesDB;
SELECT name,
CAST (value AS NVARCHAR (MAX)) AS ConstitutionContent
FROM sys.extended_properties
WHERE class = 0
AND name = N'CONSTITUTION.md';