65.9K
CodeProject 正在变化。 阅读更多。
Home

移除 SQL Server 数据库用户(用户)的几个步骤

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.91/5 (24投票s)

2010年3月19日

CPOL

3分钟阅读

viewsIcon

122344

当您在删除用户时遇到“数据库主体拥有数据库角色,无法删除”之类的错误时,删除 SQL Server 数据库用户的几个步骤。

引言

数据库安全是大多数 DBA 关注的重要问题之一。DBA 经常还原或备份数据库,这是一个非常常见的情况,但问题是,在成功还原新版本的数据库后,您希望删除当前用户。您可能只想展开用户节点并删除所需的用户;从某种意义上说,您是正确的。但是,如果您遇到类似以下错误:

Msg 15421, Level 16, State 1, Line 1
The database principal owns a database role and cannot be dropped.	 

您会怎么做?

Microsoft SQL Server 提供了很多方法来维护数据库的安全性。本文不涉及 Microsoft SQL Server 的安全性。

在本文中,我将尝试解释如何解决以下问题

  1. 数据库主体拥有数据库角色,无法删除。
  2. 数据库主体拥有架构,无法删除。

解决方案

我试图将其分为两个部分,A 部分;我们将讨论如何找出用户所在角色的列表,B 部分;我们将讨论如何解决它。

A 部分

在本节中,我们的主要目标是找出目标数据库的现有角色列表。为此,我们使用一个简单的 transact-SQL,借助 SQL Server 的 SYS.DATABASE_PRINCIPALS 表。下面列出了一个示例 SQL 脚本和所需的步骤

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

示例 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”表的更多信息。

B 部分

我认为这并不是一项非常复杂的任务,让我们开始,您的 SQL Server Management Studio 已打开,并且您已作为管理员用户(即“sa”)登录。

从 A 部分,我们已经获得了列表,现在任务是删除所需的用户。为此,我们需要按照以下步骤操作

  1. 现在从对象资源管理器中展开“数据库”节点。
    1. 选择目标数据库 >>---> 安全性 >>--> 角色 >>--> 数据库角色。
    2. 现在双击上面 SQL 命令输出中列出的条目。
    3. 将“所有者”更改为某个临时用户名。
    4. 如果您要删除的用户名出现在对话框中,请从中选择并将其删除。
      (对以上 SQL 查询中出现的所有角色执行此操作。)
  2. 导航到数据库 >>--> 目标数据库 >>--> 安全性 >>--> 架构。
    1. 双击打开“db_owner”,并将架构所有者更改为 dbo。
  3. 现在转到:数据库 >>--> 目标数据库 >>--> 安全性 >>--> 用户。
  4. 右键单击要删除的用户名,然后单击“删除”,然后在弹出的新对话框中单击“确定”。

注意:在完成上述步骤后,除了 B 部分的步骤 4,您还可以尝试存储过程 sp_dropuser

示例

EXEC sp_dropuser 'User name' 

结论

希望这对您有所帮助。祝您使用愉快!

参考

  • MSDN

历史

  • 2010 年 3 月 20 日:初始帖子
© . All rights reserved.