Habilitei o Change Data Capture (CDC) em um banco de dados usandoexec sys.sp_cdc_enable_db
Isso cria um novo esquema cdc que pertence ao usuário cdc
select
s.*
, dp.name
from sys.schemas as s
join sys.database_principals as dp
on dp.principal_id = s.principal_id
Como desejo aproveitar o encadeamento de propriedade e ler esse esquema usando um proc, posso alterar o proprietário para dbo ?
ALTER AUTHORIZATION ON SCHEMA::cdc TO dbo
Este comando funciona e muda o proprietário. Mas o CDC já está habilitado há algum tempo e estou preocupado em quebrar algo mais adiante.
Da documentação :
Em outra parte da mesma documentação (na seção "Fluxo de dados"), há um diagrama que implica fortemente que você deve usar
cdc.fn_cdc_get_all_changes_<capture_instance>
e/oucdc.fn_cdc_get_net_changes_<capture_instance>
. Na documentação desses , há um pouco sobre permissões :O que significa que a permissão SELECT na tabela subjacente deve ser suficiente e você não precisa alterar nada sobre como o CDC funciona (permissões ou não).
Solução alternativa?
Você perguntou:
Em vez de alterar a propriedade, por que não conceder a si mesmo ou a outros privilégios para ler o esquema? Você poderia ir direto
CONTROL
(mas nãoALTER
):A ideia de encadeamento de propriedade é considerada usada com cautela pela Microsoft:
Referência: permissões de esquema GRANT (Transact-SQL) (Microsoft Learn)
Você possivelmente se encontraria nessa situação alterando o proprietário do esquema para
dbo
.