Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
GitHub Copilot no SSMS (SQL Server Management Studio) executa consultas e comandos no contexto do logon. Este artigo explica o modelo de execução padrão e como usar o CONSTITUTION.md de um banco de dados para especificar um usuário específico do banco de dados ou um login SQL específico para definir o contexto de execução do banco de dados.
Contexto de execução padrão
Todas as consultas que o GitHub Copilot no SSMS gera e executa, tanto no modo Ask quanto no modo Agent, são executadas com o usuário ou login que você usou para se conectar ao banco de dados.
Observação
O modo GitHub Copilot Agent no SSMS (SQL Server Management Studio) está atualmente em versão prévia.
Copilot não tem permissões separadas nem acesso elevado. Se o usuário ou login não puder ler uma tabela, o Copilot também não poderá lê-la.
Importante
O sistema de aprovação no modo Agent não é um limite de segurança. Ele confirma sua intenção antes de cada ação, mas não restringe o que o Copilot pode fazer além das permissões já concedidas à sua conta. O limite de segurança real é a imposição de permissão do SQL Server. Aplique o princípio do menor privilégio: conceda aos usuários apenas as permissões SELECT, EXECUTE e outras permissões necessárias nos objetos específicos aos quais devem ter acesso.
Especificar o contexto de execução do GitHub Copilot com CONSTITUTION.md
O banco de dados CONSTITUTION.md permite que os proprietários do banco de dados especifiquem um usuário de banco de dados ou login SQL aplicável a todas as interações do GitHub Copilot para esse banco de dados, nos modos Ask e Agent. Ela é armazenada como uma propriedade estendida no nível do banco de dados. Ele tem a precedência mais alta de qualquer instrução para esse banco de dados: ele substitui todas as AGENTS.md instruções no nível do objeto. Quando configurado, o SSMS usa EXECUTE AS para executar consultas geradas por Copilot nessa conta especificada.
O usuário conectado ao SSMS deve ter a permissão IMPERSONATE para o usuário Copilot designado. Sem essa permissão, Copilot não podem executar consultas e o recurso não funciona para esse usuário. Esse comportamento é por design: em vez de recuar silenciosamente para as próprias permissões do usuário (que podem ser excessivamente amplas), o sistema impõe o princípio de privilégios mínimos. Os administradores devem conceder IMPERSONATE na conta de execução do Copilot a todos os usuários que precisam de acesso ao Copilot. Eles também podem usar a ausência dessa concessão para bloquear o uso de Copilot para usuários ou funções específicas.
Para especificar um usuário do banco de dados ou login do SQL para o GitHub Copilot usar ao executar consultas, adicione a propriedade agentExecuteAsUser ao front matter YAML do CONSTITUTION.md do banco de dados. O agentExecuteAsUser deve ser adicionado aos metadados iniciais do CONSTITUTION.md para que isso seja reconhecido pelo GitHub Copilot.
Propriedade de matéria frontal agentExecuteAsUser
---
agentExecuteAsUser: <database user or SQL login>
---
A propriedade agentExecuteAsUser aceita um nome de usuário de banco de dados ou um nome de logon SQL Server. Quando você define essa propriedade, GitHub Copilot usa a identidade especificada ao executar consultas nesse banco de dados.
- O escopo é por banco de dados. Cada banco de dados pode ter o seu próprio
CONSTITUTION.mdcom um valor diferenteagentExecuteAsUser. - Instruções individuais
AGENTS.mdno nível do objeto não podem substituiragentExecuteAsUser. O contexto de execução da Constituição tem precedência para todo o banco de dados.
Adicionar agentExecuteAsUser ao CONSTITUTION.md
Armazene a CONSTITUTION.md instrução como uma propriedade estendida no banco de dados usando sp_addextendedproperty. O @name deve ser CONSTITUTION.md e o @value contém o conteúdo completo da constituição, incluindo o front matter em YAML.
O exemplo a seguir define agentExecuteAsUser como um usuário de relatório de baixo privilégio (ReportingUser) e adiciona um padrão de codificação:
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 lê a constituição de um banco de dados quando um usuário abre uma sessão de GitHub Copilot para esse banco de dados. Neste exemplo, GitHub Copilot usa ReportingUser como o contexto de execução para consultas nesse banco de dados.
Elementos pré-textuais com corpo da constituição
Os metadados YAML e o corpo em Markdown coexistem no mesmo valor CONSTITUTION.md. Os elementos pré-textuais são delimitados pelos marcadores --- no início do conteúdo. Tudo após a tag de fechamento --- é considerado o corpo da instrução e serve como diretriz para todas as interações com o 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.';
Usuário de banco de dados versus login SQL
A propriedade agentExecuteAsUser aceita um usuário de banco de dados ou um logon do SQL Server. Use as diretrizes a seguir para escolher o que é mais apropriado para seu ambiente:
| Usuário de banco de dados | Logon do SQL | |
|---|---|---|
| Âmbito | Específico para um banco de dados | Identidade de todo o servidor |
| Quando usar | Quando você deseja definir permissões no nível do banco de dados | Quando você deseja definir permissões para uma identidade no nível do servidor |
| Recommendation | Oferece controle mais granular | Usar quando uma identidade no nível do servidor for necessária |
Para a maioria das implantações, especificar um usuário de banco de dados fornece o controle mais granular. Crie um usuário dedicado de banco de dados de baixo privilégio para GitHub Copilot e conceda a ele apenas as permissões necessárias para as interações Copilot esperadas nesse banco de dados.
Exemplo: criar um usuário de banco de dados dedicado com permissões limitadas
/* 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 */
Em seguida, defina agentExecuteAsUser: GHCP_DB_User em CONSTITUTION.md para o banco de dados SalesDB.
Práticas recomendadas
Use uma conta dedicada e de baixo privilégio: crie um usuário de banco de dados específico ou faça logon para GitHub Copilot em vez de reutilizar um usuário existente. Essa abordagem minimiza o risco de atribuir permissões incorretas a usuários do GitHub Copilot caso o usuário ou nome de usuário seja usado para outra finalidade.
Conceda apenas o necessário: analise os casos de uso típicos do Copilot para o seu banco de dados e conceda apenas as permissões necessárias. Comece com acesso somente leitura (
SELECT) e adicione permissões de modificação deliberadamente.Evite contas altamente privilegiadas: não defina
agentExecuteAsUsercomosa,dboou qualquer conta com permissões altas, a menos que o caso de uso exija explicitamente.Audite regularmente: revise periodicamente as permissões da conta
agentExecuteAsUser, à medida que os requisitos do seu banco de dados e da sua equipe mudarem.Embrar o limite de execução: a configuração
agentExecuteAsUsercontrola qual identidade Copilot usa, mas a imposição de permissão do SQL Server é o limite de segurança real. Verifique se a conta especificada tem apenas as permissões mínimas necessárias.
Atualizar ou remover agentExecuteAsUser
Para alterar o agentExecuteAsUser valor ou atualizar outras partes da constituição, use sp_updateextendedproperty:
USE SalesDB;
EXECUTE sp_updateextendedproperty
@name = N'CONSTITUTION.md',
@value = N'---
agentExecuteAsUser: New_GHCP_User
---
Updated constitution content here.';
Para remover totalmente a CONSTITUTION.md instrução, use sp_dropextendedproperty:
USE SalesDB;
EXECUTE sp_dropextendedproperty @name = N'CONSTITUTION.md';
Após a remoção, o GitHub Copilot executa consultas usando as credenciais do usuário conectado, e não se aplica nenhuma configuração no nível do banco de dados.
Verificar a constituição atual
Para verificar se uma instrução CONSTITUTION.md está definida para um banco de dados, pergunte Copilot:
Does this database have a constitution set?
Ou consulte as propriedades estendidas diretamente:
USE SalesDB;
SELECT name,
CAST (value AS NVARCHAR (MAX)) AS ConstitutionContent
FROM sys.extended_properties
WHERE class = 0
AND name = N'CONSTITUTION.md';
Conteúdo relacionado
- Usar instruções de banco de dados com o GitHub Copilot no SQL Server Management Studio
- Use o modo Agente do GitHub Copilot (versão prévia) no SQL Server Management Studio
- Introdução ao GitHub Copilot no SQL Server Management Studio
- Solucionar problemas do GitHub Copilot no SQL Server Management Studio