我已使用以下命令在数据库上启用了更改数据捕获 (CDC)exec sys.sp_cdc_enable_db
这将创建一个由cdc用户拥有的新cdc架构
select
s.*
, dp.name
from sys.schemas as s
join sys.database_principals as dp
on dp.principal_id = s.principal_id
因为我想利用所有权链接并使用 proc 从此架构中读取数据,所以我可以将所有者更改为dbo吗?
ALTER AUTHORIZATION ON SCHEMA::cdc TO dbo
此命令起作用并更改所有者。但疾病预防控制中心已经启用了一段时间,我担心未来会进一步破坏一些东西。
从文档中:
在同一文档的其他地方(在“数据流”部分),有一个图表强烈暗示您应该使用
cdc.fn_cdc_get_all_changes_<capture_instance>
and/orcdc.fn_cdc_get_net_changes_<capture_instance>
。在这些文档中,有一些关于权限的内容:这意味着对基础表的 SELECT 权限应该足够了,您不需要更改有关 CDC 工作方式(权限或其他)的任何内容。
替代解决方案?
你问:
与其更改所有权,为什么不授予自己或其他人从架构中读取数据的权限呢?你可以直接进入
CONTROL
(但不是ALTER
):所有权链的思想实际上被微软认为是谨慎使用的:
参考: GRANT 架构权限 (Transact-SQL) (Microsoft Learn)
通过将架构所有者更改为 ,您可能会陷入这种情况
dbo
。