数据库用户删除指南

在数据库管理中,备份或恢复数据库是一个常见的操作场景。但有时在成功恢复数据库的新版本后,可能需要删除当前的用户。虽然直接在用户节点上删除用户看似是一个简单的操作,但可能会遇到错误,例如: Msg 15421, Level 16, State 1, Line 1 数据库主体拥有数据库角色,无法删除。 面对这样的问题,应该如何操作呢?

微软的SQL Server提供了多种方法来维护数据库的安全性。本文不讨论SQL Server的安全性,而是专注于如何解决以下问题: 数据库主体拥有数据库角色,无法删除。 数据库主体拥有模式,无法删除。

解决方案

本文将分为两个部分进行讨论。在第一部分,将讨论如何找出用户所在的角色列表;在第二部分,将讨论如何解决这个问题。

在这部分,主要目标是找出目标数据库中现有的角色列表。为此,可以使用一个简单的Transact-SQL查询,通过SQL Server的 SYS.DATABASE_PRINCIPALS 表来实现。以下是示例SQL脚本和所需的步骤:

打开SQL Server Management Studio,并以管理员用户身份登录。 选择数据库,设置用户名,并执行以下Transact-SQL查询以获取数据库角色和用户详细信息。

SELECT DBPRINCIPAL_1.NAME AS ROLE, DBPRINCIPAL_1.NAME AS OWNER FROM SYS.DATABASE_PRINCIPALS AS DBPRINCIPAL_1 INNER JOIN SYS.DATABASE_PRINCIPALS AS DBPRINCIPAL_2 ON DBPRINCIPAL_1.PRINCIPAL_ID = DBPRINCIPAL_2.OWNING_PRINCIPAL_ID WHERE (DBPRINCIPAL_1.NAME = 'User Name To Remove')

上述Transact-SQL查询将返回用户所在的角色列表。 关于 SYS.DATABASE_PRINCIPALS 表的更多信息可以在 中找到。

这部分的任务是在第一部分的基础上,删除指定的用户。以下是需要遵循的步骤:

首先,在对象资源管理器中展开“数据库”节点。 选择目标数据库,然后依次进入“安全性”->“角色”->“数据库角色”。 双击上述SQL命令输出中列出的条目。 将“所有者”更改为某个临时用户名。 如果对话框中出现了您想要删除的用户名,请选择并将其从那里删除。 (对于上述SQL查询中出现的每个角色,都执行此操作。)

导航到“数据库”->目标数据库->“安全性”->“模式”。 双击打开“db_owner”并将模式所有者更改为dbo。

然后转到:数据库->目标数据库->“安全性”->“用户”。 右键单击您想要删除的用户名,然后点击“删除”,在新出现的对话框中点击“确定”。

注意:在完成上述步骤(除了第二部分第4步)之后,您也可以尝试使用存储过程 sp_dropuser 来删除用户。

EXEC sp_dropuser 'User name'
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485