从SQL Server数据库中删除用户?

37

如何在不删除其日志记录的情况下从数据库中删除用户?

脚本应检查用户是否存在于数据库中,如果存在则删除该用户。


可能是重复的问题:如何在SQL Server中测试用户是否存在? - IMSoP
2个回答

73

这是您试图做的吗?

IF  EXISTS (SELECT * FROM sys.database_principals WHERE name = N'username')
DROP USER [username]

如果您正在使用SQL Server Management Studio,您可以浏览到该用户并右键单击选择删除。


这里的N是什么意思,N'username'? - zer0w1dthspace
3
'n' 只是告诉 SQL Server 这个字符串的值是 Unicode 编码的。这可以避免在使用不同字符集的人员处理时出现问题。 - doug_w
显然,我在2019年9月23日发现了这个问题,今天(2021年9月7日)又遇到了它(现在我知道为什么我从不记忆事物,我可以直接谷歌它们 :) 再次感谢您的帮助,尽管我不能再次点赞您。 - Brad

19

已接受的答案工作良好。此外,需要知道的是从2016版(13.x)开始SQL Server添加了IF EXISTS到某些DROP命令中,包括'DROP USER'命令。

IF EXISTS

适用于: SQL Server ( SQL Server 2016 (13.x) 至当前版本,SQL 数据库)。

仅在用户已存在时有条件地删除该用户。

因此,您可以按以下方式仅删除用户:

-- Syntax for SQL Server and Azure SQL Database  
DROP USER IF EXISTS user_name  

请参阅此链接中的完整描述:DROP USER (Transact-SQL)

希望这可以帮到您。


3
旧的答案并不是错误的,但这是2016年以来最清晰、最简洁的方法。 - grasmi
DROP USER IF EXISTS 'DOMAIN\user-name' 返回 "语法不正确 - 期望 ID 或 QUOTED_ID"。请问如何解决这个问题? - Dieter
1
如果存在[DOMAIN\user-name]用户,请使用[ ]代替' '来删除用户,同时禁用[DOMAIN\user-name]登录。 - Abuelhija

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接