【问题标题】:changing schema from `dbo` to custom name将架构从“dbo”更改为自定义名称
【发布时间】:2015-07-12 05:07:43
【问题描述】:

我有一个非常简单的问题:

如何将数据库架构从 dbo 更改为另一个架构?

我已经试过了:

alter schema [new_schema] transfer [old_schema].[object_name];

但我在使用查询时收到关于权限的错误,并且在使用 GUI 时无法修改错误属性。我自己创建了数据库,并获得了所有权限。我能想到的唯一问题来自 GoDaddy,因为我正在使用 GoDaddy 的计划来托管我的数据库。我可以成功地将表从任何其他架构转移到dbo,但我无法将任何表从dbo 转移到任何其他架构...

错误:

'Cannot transfer the object 'Production', because it does not exist or you do not have permission.'

任何帮助将不胜感激。

【问题讨论】:

  • 我会说权限错误意味着godaddy不允许你拥有移动这些东西的权限。
  • @Randy 但是为什么我可以将对象从另一个架构移动到 dbo 架构?
  • 能否列出具体错误

标签: sql database schema sql-server-2014 dbo


【解决方案1】:

适用于:SQL Server(SQL Server 2008 至当前版本)、Azure SQL 数据库

要从另一个架构传输安全对象,当前用户必须对安全对象(非架构)拥有CONTROL 权限,并在目标架构上拥有ALTER 权限。

如果安全对象上有EXECUTE AS OWNER 规范并且所有者设置为SCHEMA OWNER,则用户还必须对目标架构的所有者拥有IMPERSONATION 权限。

与正在传输的安全对象关联的所有权限在移动时都会被删除。

ALTER SCHEMA 只能用于在同一数据库中的模式之间移动安全对象。要更改或删除模式中的安全对象,请使用特定于该安全对象的 ALTERDROP 语句。

如果 securable_name 使用单部分名称,则将使用当前有效的名称解析规则来定位安全对象。

当安全对象移动到新架构时,与安全对象关联的所有权限都将被删除。如果已明确设置安全对象的所有者,则所有者将保持不变。如果安全对象的所有者已设置为SCHEMA OWNER,则所有者将保持为SCHEMA OWNER;但是,移动后SCHEMA OWNER 将解析为新架构的所有者。新所有者的 principal_id 将为 NULL。

也许您应该只编写要移动的表并在目标dbo 中重新创建它?

【讨论】:

    猜你喜欢
    • 2010-11-11
    • 1970-01-01
    • 1970-01-01
    • 2014-11-03
    • 1970-01-01
    • 2018-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多