AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 331020
Accepted
Zikato
Zikato
Asked: 2023-09-08 17:55:42 +0800 CST2023-09-08 17:55:42 +0800 CST 2023-09-08 17:55:42 +0800 CST

我可以更改 cdc 架构的所有者吗?

  • 772

我已使用以下命令在数据库上启用了更改数据捕获 (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

此命令起作用并更改所有者。但疾病预防控制中心已经启用了一段时间,我担心未来会进一步破坏一些东西。

security
  • 2 2 个回答
  • 116 Views

2 个回答

  • Voted
  1. Best Answer
    Ben Thul
    2023-09-09T01:50:35+08:002023-09-09T01:50:35+08:00

    从文档中:

    为了使更改数据捕获 (CDC) 正常运行,您不应手动修改任何 CDC 元数据,例如 CDC 架构、更改表、CDC 系统存储过程、默认 cdc 用户权限 (sys.database_principals) 或重命名 cdc 用户。

    在同一文档的其他地方(在“数据流”部分),有一个图表强烈暗示您应该使用cdc.fn_cdc_get_all_changes_<capture_instance>and/or cdc.fn_cdc_get_net_changes_<capture_instance>。在这些文档中,有一些关于权限的内容:

    需要 sysadmin 固定服务器角色或 db_owner 固定数据库角色的成员身份。对于所有其他用户,需要对源表中所有捕获的列具有 SELECT 权限,并且如果定义了捕获实例的门控角色,则需要该数据库角色的成员资格。

    这意味着对基础表的 SELECT 权限应该足够了,您不需要更改有关 CDC 工作方式(权限或其他)的任何内容。

    • 4
  2. John K. N.
    2023-09-08T19:23:34+08:002023-09-08T19:23:34+08:00

    替代解决方案?

    你问:

    因为我想利用所有权链接并使用过程从该架构中读取数据,所以我可以将所有者更改为 dbo 吗?

    与其更改所有权,为什么不授予自己或其他人从架构中读取数据的权限呢?你可以直接进入CONTROL(但不是ALTER):

    GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA::cdc TO <desired_principal>;
    

    所有权链的思想实际上被微软认为是谨慎使用的:

    对架构具有 ALTER 权限的用户可以使用所有权链接来访问其他架构中的安全对象,包括明确拒绝该用户访问的安全对象。这是因为当引用对象由拥有引用它们的对象的主体拥有时,所有权链会绕过对引用对象的权限检查。对架构具有 ALTER 权限的用户可以创建架构所有者拥有的过程、同义词和视图。这些对象将可以(通过所有权链接)访问模式所有者拥有的其他模式中的信息。如果可能,如果架构的所有者还拥有其他架构,则应避免授予对该架构的 ALTER 权限。

    参考: GRANT 架构权限 (Transact-SQL) (Microsoft Learn)

    通过将架构所有者更改为 ,您可能会陷入这种情况dbo。

    • 1

相关问题

  • SA 帐户和其他已知帐户名称对安全构成了哪些安全威胁?

  • 在 Oracle 中执行 PL/SQL 工作的应用程序开发人员的安全性

  • 基于用户的不同登录凭据

  • 存储过程可以防止 SQL 注入吗?

  • 保护数据库密码

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve