解决SQL Server删除用户的时候显示用户拥有架构Schema无法删除的错误

删除用户的时候,可能会出现如下图的错误:


图1. 删除某用户的时候可能会显示这个错误

或者:


图2. Drop查询执行的错误

错误是:The database principal owns a schema in the database, and cannot be dropped.
大意是:该数据库主体拥有数据库架构(Schema),不能被删除。

解决方案两种,一种用查询代码的方法,一种用SSMS图形界面的方法:

用查询代码的办法

查询到特定用户拥有的Schema:

--达叔傻乐 ([email protected])
--打开SSMS(SQL Server Management Studio)连接数据库服务器并新建个查询,
--把这里所有的查询代码都复制到新建的空白查询里,
--然后把下面第一行代码中的变量@userName的值“InfoManager”改成要查询的用户名再执行该查询就可以了

DECLARE @userName NVARCHAR(MAX) = 'InfoManager';
 
SELECT s.name
FROM sys.schemas s
WHERE s.principal_id= USER_ID(@userName);

使用下面命令一一将所有Schema的设定设置成默认的:

--达叔傻乐 ([email protected])
--打开SSMS(SQL Server Management Studio)连接数据库服务器并新建个查询,
--把这里所有的查询代码都复制到新建的空白查询里,
-- 把下面的xxxxxx换成上面命令查询到的名称中的某一个(每一个名称都需要同样处理)
ALTER AUTHORIZATION ON SCHEMA::xxxxxx TO xxxxxx;

示例代码:

-- 示例代码
ALTER AUTHORIZATION ON SCHEMA::db_owner TO db_owner;
ALTER AUTHORIZATION ON SCHEMA::db_accessadmin TO db_accessadmin;
ALTER AUTHORIZATION ON SCHEMA::db_securityadmin TO db_securityadmin;
ALTER AUTHORIZATION ON SCHEMA::db_ddladmin TO db_ddladmin;
ALTER AUTHORIZATION ON SCHEMA::db_backupoperator TO db_backupoperator;
ALTER AUTHORIZATION ON SCHEMA::db_datareader TO db_datareader;
ALTER AUTHORIZATION ON SCHEMA::db_datawriter TO db_datawriter;
ALTER AUTHORIZATION ON SCHEMA::db_denydatareader TO db_denydatareader;
ALTER AUTHORIZATION ON SCHEMA::db_denydatawriter TO db_denydatawriter;

用SSMS图形界面的方法

也可以在SSMS里在相关用户名上点右键,在弹出菜单中选择属性Properties,到如下位置查询:


图3. 查看用户拥有的Schema

记住图3中特定用户有选中的Schema,如图3上红框中所示,然后按图4中所示,一个个把修改过所有者的Schema的所有者恢复为默认(当然也可以按需要改成别的),最后点确定OK按钮保存设定即可。


图4. 修改对应Schema的所有者为默认

你可能感兴趣的:(解决SQL Server删除用户的时候显示用户拥有架构Schema无法删除的错误)