You need to enable JavaScript to run this app.
文档中心
云数据库 SQL Server 版

云数据库 SQL Server 版

复制全文
下载 pdf
常见问题
操作数据库权限时报错提示为 The database principal owns a schema, and cannot be dropped 如何处理?
复制全文
下载 pdf
操作数据库权限时报错提示为 The database principal owns a schema, and cannot be dropped 如何处理?
本文介绍当操作数据库权限时,报错提示为 ”The database principal owns a schema in the database, and cannot be dropped” 的排查方法与处理方案。​
报错原因​
SQL Server 规定,若某个用户(principal)拥有 schema,则不允许直接删除该用户。当管控授权流程需要删除、重建或调整该用户时,会被 SQL Server 的对象归属保护机制拦截,从而导致操作失败。​
前置排查​
使用以下 SQL 进行排查,确认是否存在业务用户(非系统内置)拥有 schema 的情况:​
​
-- 将 testdb 替换为授权时报错的数据库​
USE [testdb];​
GO​
SELECT s.name AS user_schema_name,​
s.schema_id,​
s.principal_id,​
dp.name AS schema_owner_user,​
dp.type_desc​
FROM SYS.schemas AS S​
INNER JOIN​
SYS.database_principals AS dp​
ON S.principal_id = dp.principal_id​
WHERE dp.name NOT IN ('dbo', 'guest', 'sys', 'INFORMATION_SCHEMA')​
AND dp.type = 'S';​
GO​
​
若查询结果中 schema_owner_user 为目标业务用户(例如返回 db_datareader、db_datawriter,owner 均为该业务用户),即可判定:报错是因为该用户持有 schema 所有权。​
解决方案​
若确认报错由业务用户持有 schema 所有权导致,有以下两种解决方案,您可根据业务情况选择适合的解决方案。​
方案一(推荐):调整 Schema 所有者,走控制台授权​
将业务用户持有的 schema 所有权迁回 dbo(或其他合适 owner),解除无法删除或重建用户的限制,之后到云数据库 SQL Server 版控制台进行授权。具体步骤如下:​
  1. 将目标用户持有的 schema ownership 逐个迁回 dbo(或其他合适 owner)。​
  • ​
    USE [testdb]; --将 testdb 替换为授权时报错的数据库​
    GO​
    ALTER AUTHORIZATION ON SCHEMA::[db_datareader] TO [dbo]; --将 db_datareader 的 Schema 所有权转移给 dbo(或其他合适 owner)​
    GO​
    ALTER AUTHORIZATION ON SCHEMA::[db_datawriter] TO [dbo]; --将 db_datawriter 的 Schema 所有权转移给 dbo(或其他合适 owner)​
    GO​
    ​
  1. 转移完成后,回到控制台,重新执行授权操作。​
​
方案二:直连实例用原生 T-SQL 管理账号​
该方案不通过控制台进行授权。直接连接 SQL Server 实例后,使用原生 T-SQL 删除、重建业务用户,并完成授权。​
执行以下 SQL,删除、重建用户,并重新赋予账号读写权限:​
​
USE [testdb]; --切换至目标业务数据库,请替换 testdb 为实际数据库名​
GO​
DROP USER [test_user]; --删除当前库内的数据库用户 test_user​
GO​
CREATE USER [test_user] FOR LOGIN [test_user]; --基于服务器登录名,重建同名数据库用户​
GO​
ALTER ROLE [db_datareader] ADD MEMBER [test_user]; --获得库内表读取权限​
GO​
ALTER ROLE [db_datawriter] ADD MEMBER [test_user]; --获得库内表增删改权限​
GO​
​
注意​
请将 testdb、test_user 替换为您实际使用的数据库和业务账号。​
最近更新时间:2026.11.04 17:13:27
这个页面对您有帮助吗?
有用
有用
无用
无用