Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
GitHub Copilot в SQL Server Management Studio (SSMS) выполняет запросы и команды от имени вашей учетной записи. В этой статье объясняется модель выполнения по умолчанию и использование базы данных CONSTITUTION.md для указания определенного пользователя базы данных или имени входа SQL для задания контекста выполнения для базы данных.
Контекст выполнения по умолчанию
Все запросы, которые GitHub Copilot в SSMS создает и выполняет как в режиме Ask, так и в режиме Agent, выполняются от имени пользователя или имени входа, которые вы использовали для подключения к базе данных.
Замечание
режим агента GitHub Copilot в SQL Server Management Studio (SSMS) в настоящее время находится в предварительной версии.
Copilot не имеет отдельных разрешений и нет повышенных прав доступа. Если ваш пользователь или учетная запись не могут прочитать таблицу, Copilot тоже не сможет ее прочитать.
Important
Система утверждения в режиме агента не является границей безопасности. Он подтверждает намерение перед каждым действием, но он не ограничивает то, что Copilot может сделать за пределами разрешений, уже предоставленных вашему входу. Фактическая граница безопасности — это принудительное применение разрешений SQL Server. Применяйте принцип наименьших привилегий: предоставляйте пользователям только те разрешения SELECT, EXECUTE и другие разрешения, которые им необходимы для доступа к конкретным объектам.
Укажите контекст выполнения GitHub Copilot с помощью CONSTITUTION.md
База данных CONSTITUTION.md позволяет владельцам баз данных указать пользователя базы данных или имя входа SQL, которое применяется ко всем взаимодействиям GitHub Copilot для этой базы данных для режима "Запрос" и "Агент". Он хранится как расширенное свойство на уровне базы данных. Эта инструкция имеет наивысший приоритет среди всех инструкций для этой базы данных: она переопределяет все инструкции уровня объекта AGENTS.md. После настройки SSMS использует EXECUTE AS для выполнения запросов, созданных Copilot, под этой указанной учетной записью.
Пользователь SSMS, вошедший в систему, должен иметь разрешение IMPERSONATE для указанного пользователя Copilot. Без этого разрешения Copilot не может выполнять запросы, и эта функция не работает для этого пользователя. Это поведение выполняется путем проектирования: вместо того, чтобы автоматически вернуться к собственным разрешениям пользователя (которые могут быть чрезмерно широкими), система применяет принцип наименьшей привилегии. Администраторы должны предоставить всем пользователям, которым требуется доступ к Copilot, IMPERSONATE для учетной записи выполнения Copilot. Они также могут использовать отсутствие этого предоставления для блокировки использования Copilot для определенных пользователей или ролей.
Чтобы указать пользователя базы данных или учетную запись SQL Server, которые GitHub Copilot будет использовать при выполнении запросов, добавьте свойство agentExecuteAsUser в YAML-блок метаданных CONSTITUTION.md для базы данных.
agentExecuteAsUser необходимо добавить в front matter CONSTITUTION.md, чтобы GitHub Copilot его распознал.
свойство метаданных agentExecuteAsUser
---
agentExecuteAsUser: <database user or SQL login>
---
Свойство agentExecuteAsUser принимает имя пользователя базы данных или имя входа SQL Server. При установке этого свойства GitHub Copilot использует указанное удостоверение при выполнении запросов к этой базе данных.
- Область действия — на уровне базы данных. Каждая база данных может иметь собственное
CONSTITUTION.mdзначение с другимagentExecuteAsUserзначением. - Инструкции на уровне отдельных
AGENTS.mdобъектов не могут переопределятьсяagentExecuteAsUser. Контекст выполнения конституции имеет приоритет для всей базы данных.
Добавить agentExecuteAsUser в CONSTITUTION.md
Сохраните инструкцию CONSTITUTION.md в качестве расширенного свойства в базе данных с помощью sp_addextendedproperty.
@name должен быть CONSTITUTION.md, а @value содержит полный текст конституции, включая блок метаданных YAML.
В следующем примере для agentExecuteAsUser задается пользователь для отчетов с низким уровнем привилегий (ReportingUser) и добавляется стандарт кодирования:
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 считывает конституцию базы данных, когда пользователь открывает сеанс GitHub Copilot для этой базы данных. В этом примере GitHub Copilot использует ReportingUser в качестве контекста выполнения запросов к этой базе данных.
Вводная часть с основным текстом конституции
YAML-метаданные и тело Markdown сосуществуют в одном и том же значении CONSTITUTION.md. Вводная часть выделяется маркерами --- в начале содержимого. Всё, что следует после закрывающего тега ---, рассматривается как основная часть инструкции и используется как руководство во всех взаимодействиях с Copilot.
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.';
Пользователь базы данных и SQL-логин
Свойство agentExecuteAsUser принимает либо пользователя базы данных, либо учетную запись SQL Server. Используйте следующие рекомендации, чтобы выбрать наиболее подходящие для вашей среды:
| пользователь базы данных; | Имя входа SQL | |
|---|---|---|
| Объем | Относится к одной базе данных | Общесерверный идентификатор |
| Когда использовать | Если требуется задать разрешения на уровне базы данных | Если вы хотите задать разрешения для учетной записи уровня сервера |
| Рекомендация | Предлагает более детализированный контроль | Используется, если требуется удостоверение на уровне сервера |
Для большинства развертываний указание пользователя базы данных обеспечивает наиболее детальный контроль. Создайте выделенного пользователя базы данных с низким уровнем привилегий для GitHub Copilot и предоставьте ему только разрешения, необходимые для ожидаемых Copilot взаимодействий в этой базе данных.
Пример: создание выделенного пользователя базы данных с ограниченными разрешениями
/* 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 */
Затем задайте значение agentExecuteAsUser: GHCP_DB_User в CONSTITUTION.md для базы данных SalesDB.
Лучшие практики
Использовать выделенную учетную запись с низким уровнем привилегий: создайте определенного пользователя базы данных или имя входа для GitHub Copilot вместо повторного использования существующего пользователя. Этот подход сводит к минимуму риск неправильного назначения разрешений GitHub Copilot пользователям, если пользователь или имя входа используются для другой цели.
Предоставляйте только то, что необходимо: Просмотрите типичные сценарии использования Copilot для вашей базы данных и предоставляйте только необходимые разрешения. Начните с доступа только для чтения (
SELECT) и намеренно добавляйте разрешения на изменение.Избегайте привилегированных учетных записей: не устанавливайте
agentExecuteAsUserвsa,dboили любую учетную запись с расширенными правами доступа, если этого явно не требует сценарий использования.Регулярно проверяйте разрешения учетной
agentExecuteAsUserзаписи по мере изменения требований к базе данных и команде.Помните о границе выполнения: параметр
agentExecuteAsUserопределяет, какие учетные данные использует Copilot, но проверка разрешений в SQL Server является фактической границей безопасности. Убедитесь, что указанная учетная запись имеет только необходимые минимальные разрешения.
Обновить или удалить agentExecuteAsUser
Чтобы изменить agentExecuteAsUser значение или обновить другие части конституции, используйте sp_updateextendedpropertyследующую команду:
USE SalesDB;
EXECUTE sp_updateextendedproperty
@name = N'CONSTITUTION.md',
@value = N'---
agentExecuteAsUser: New_GHCP_User
---
Updated constitution content here.';
Чтобы полностью удалить инструкцию CONSTITUTION.md , используйте sp_dropextendedproperty:
USE SalesDB;
EXECUTE sp_dropextendedproperty @name = N'CONSTITUTION.md';
После удаления GitHub Copilot выполняет запросы с учетными данными подключенного пользователя, и правило уровня базы данных не применяется.
Проверка текущей конституции
Чтобы проверить, задана ли инструкция CONSTITUTION.md для базы данных, попросите Copilot:
Does this database have a constitution set?
Или запросите расширенные свойства напрямую:
USE SalesDB;
SELECT name,
CAST (value AS NVARCHAR (MAX)) AS ConstitutionContent
FROM sys.extended_properties
WHERE class = 0
AND name = N'CONSTITUTION.md';
Связанный контент
- Использование инструкций по базе данных с GitHub Copilot в SQL Server Management Studio
- Использовать режим агента GitHub Copilot (предварительная версия) в SQL Server Management Studio
- Начните работать с GitHub Copilot в SQL Server Management Studio
- Устранение неполадок с GitHub Copilot в SQL Server Management Studio