Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
GitHub Copilot en SQL Server Management Studio (SSMS) ejecuta consultas y comandos en el contexto del inicio de sesión. En este artículo se explica el modelo de ejecución predeterminado y cómo usar el CONSTITUTION.md de una base de datos para especificar un usuario concreto de la base de datos o un inicio de sesión SQL para establecer el contexto de ejecución de la base de datos.
Contexto de ejecución predeterminado
Todas las consultas que GitHub Copilot en SSMS generan y ejecutan, tanto en el modo Ask como en el modo Agente, se ejecutan en el usuario o el inicio de sesión que usó para conectarse a la base de datos.
Nota:
El modo Agente de GitHub Copilot en SQL Server Management Studio (SSMS) se encuentra actualmente en versión preliminar.
Copilot no tiene permisos independientes y ningún acceso con privilegios elevados. Si el usuario o la cuenta de inicio de sesión no pueden leer una tabla, Copilot tampoco puede leerla.
Importante
El sistema de aprobación en modo agente no es un límite de seguridad. Confirma tu intención antes de cada acción, pero no restringe lo que Copilot puede hacer más allá de los permisos ya concedidos a tu cuenta. El límite de seguridad real es la aplicación de los permisos de SQL Server. Aplique el principio del mínimo privilegio: conceda a los usuarios solo los permisos SELECT, EXECUTE y otros permisos que necesiten sobre los objetos específicos a los que deban acceder.
Especificar el contexto de ejecución de GitHub Copilot con CONSTITUTION.md
La base de datos CONSTITUTION.md permite a los propietarios de la base de datos especificar un usuario de base de datos o un inicio de sesión de SQL que se aplique a todas las interacciones de GitHub Copilot para esa base de datos para el modo Ask y Agent. Se almacena como una propiedad extendida en el nivel de base de datos. Tiene la prioridad más alta de cualquier instrucción para esa base de datos: invalida todas las AGENTS.md instrucciones de nivel de objeto. Una vez configurado, SSMS usa EXECUTE AS para ejecutar consultas generadas por Copilot con la cuenta especificada.
El usuario de SSMS con sesión iniciada debe tener IMPERSONATE permisos sobre el usuario designado de Copilot. Sin este permiso, Copilot no puede ejecutar consultas y la característica no funciona para ese usuario. Este comportamiento forma parte del diseño: en lugar de recurrir automáticamente a los permisos del propio usuario (que podrían ser demasiado amplios), el sistema aplica el principio del mínimo privilegio. Los administradores deben conceder IMPERSONATE en la cuenta de ejecución de Copilot a todos los usuarios que necesiten acceso a Copilot. También pueden usar la ausencia de esa autorización para bloquear el uso de Copilot por parte de usuarios o roles específicos.
Para especificar un usuario de la base de datos o un inicio de sesión SQL que GitHub Copilot usará al ejecutar consultas, agrega la propiedad agentExecuteAsUser al front matter de YAML del CONSTITUTION.md de la base de datos. El agentExecuteAsUser debe añadirse al front matter del CONSTITUTION.md para que GitHub Copilot lo reconozca.
propiedad de metadatos agentExecuteAsUser
---
agentExecuteAsUser: <database user or SQL login>
---
La propiedad agentExecuteAsUser acepta un nombre de usuario de base de datos o un nombre de inicio de sesión de SQL Server. Al establecer esta propiedad, GitHub Copilot usa la identidad especificada al ejecutar consultas en esa base de datos.
- El ámbito es a nivel de cada base de datos. Cada base de datos puede tener su propio
CONSTITUTION.mdcon un valor diferenteagentExecuteAsUser. - Las instrucciones individuales
AGENTS.mdde nivel de objeto no pueden invalidaragentExecuteAsUser. El contexto de ejecución de la constitución tiene prioridad para toda la base de datos.
Agregar agentExecuteAsUser al archivo CONSTITUTION.md
Almacene la CONSTITUTION.md instrucción como una propiedad extendida en la base de datos mediante sp_addextendedproperty. El @name debe ser CONSTITUTION.md y el @value contiene el contenido completo de la constitución, incluido el encabezado YAML.
En el ejemplo siguiente se establece agentExecuteAsUser en un usuario de informes con pocos privilegios (ReportingUser) y se agrega un estándar de codificación:
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 lee la constitución de una base de datos cuando un usuario abre una sesión de GitHub Copilot para esa base de datos. En este ejemplo, GitHub Copilot usa ReportingUser como contexto de ejecución para consultas en esa base de datos.
Materia preliminar con cuerpo de la constitución
Los metadatos iniciales de YAML y el cuerpo de Markdown coexisten en el mismo valor CONSTITUTION.md. La parte inicial está delimitada por los marcadores --- al inicio del contenido. Todo lo que aparece después de la etiqueta de cierre --- se considera el cuerpo de la instrucción y se usa como guía en todas las interacciones con 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.';
Usuario de base de datos frente a inicio de sesión de SQL
La propiedad agentExecuteAsUser acepta un usuario de base de datos o un inicio de sesión de SQL Server. Use las instrucciones siguientes para elegir lo que es más adecuado para su entorno:
| Usuario de la base de datos | Inicio de sesión de SQL | |
|---|---|---|
| Ámbito | Específico de una base de datos | Identidad en todo el servidor |
| Cuándo se deben usar | Si desea establecer permisos en el nivel de base de datos | Si desea establecer permisos para una identidad de nivel de servidor |
| Recomendación | Ofrece un control más granular | Usar cuando se requiere una identidad de nivel de servidor |
Para la mayoría de las implementaciones, especificar un usuario de base de datos proporciona el control más granular. Cree un usuario dedicado de base de datos con pocos privilegios para GitHub Copilot y conceda solo los permisos necesarios para las interacciones de Copilot esperadas en esa base de datos.
Ejemplo: creación de un usuario de base de datos dedicado con permisos limitados
/* 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 */
A continuación, configure agentExecuteAsUser: GHCP_DB_User en CONSTITUTION.md para la base de datos SalesDB.
Procedimientos recomendados
Use una cuenta dedicada con pocos privilegios: cree un usuario o inicio de sesión de base de datos específico para GitHub Copilot en lugar de reutilizar un usuario existente. Este enfoque minimiza el riesgo de asignar permisos incorrectamente a GitHub Copilot usuarios si se usa el usuario o el inicio de sesión para otro propósito.
Conceda solo lo necesario: revise los casos de uso típicos de Copilot para su base de datos y conceda solo los permisos necesarios. Comience con el acceso de solo lectura (
SELECT) y agregue permisos de modificación deliberadamente.Evite las cuentas con privilegios elevados: No configure
agentExecuteAsUsercomosa,dboni como ninguna cuenta con permisos elevados, a menos que el caso de uso lo requiera explícitamente.Auditar periódicamente: revise los permisos de la
agentExecuteAsUsercuenta periódicamente a medida que cambian los requisitos de la base de datos y del equipo.Recuerde el límite de ejecución: Establecer
agentExecuteAsUsercontrola qué identidad usa Copilot, pero la aplicación de permisos de SQL Server es el verdadero límite de seguridad. Asegúrese de que la cuenta especificada solo tiene los permisos mínimos necesarios.
Actualizar o quitar agentExecuteAsUser
Para cambiar el agentExecuteAsUser valor o actualizar otras partes de la constitución, use sp_updateextendedproperty:
USE SalesDB;
EXECUTE sp_updateextendedproperty
@name = N'CONSTITUTION.md',
@value = N'---
agentExecuteAsUser: New_GHCP_User
---
Updated constitution content here.';
Para quitar la CONSTITUTION.md instrucción por completo, use sp_dropextendedproperty:
USE SalesDB;
EXECUTE sp_dropextendedproperty @name = N'CONSTITUTION.md';
Después de eliminarlo, GitHub Copilot ejecuta consultas con las credenciales del usuario conectado y no se aplica ninguna configuración a nivel de base de datos.
Comprobación de la constitución actual
Para comprobar si hay una instrucción CONSTITUTION.md configurada para una base de datos, pregunta a Copilot:
Does this database have a constitution set?
O bien, consulte directamente las propiedades extendidas:
USE SalesDB;
SELECT name,
CAST (value AS NVARCHAR (MAX)) AS ConstitutionContent
FROM sys.extended_properties
WHERE class = 0
AND name = N'CONSTITUTION.md';
Contenido relacionado
- Uso de instrucciones de base de datos con GitHub Copilot en SQL Server Management Studio
- Use el modo agente de GitHub Copilot (versión preliminar) en SQL Server Management Studio
- Comienza con GitHub Copilot en SQL Server Management Studio
- Solución de problemas de GitHub Copilot en SQL Server Management Studio